首页 文章

带事件处理程序的UWP模板控件

提问于
浏览
1

我是UWP的新手并且正在尝试 . 如果它太基础,请指向链接 . 我正在开发一个自定义控件(UWP模板控件),带有一些文本框和按钮 . 理想情况下,我想在我的MainPage中使用此控件作为页眉控件,根据Templatecontrol中的每个按钮单击,我想呈现不同的页面 . 现在来看基本问题,如何在CustomControl中连接事件处理程序这是我的Generic.xaml:(Project1.Library)

<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:UWP.CustomControls.Library">

<Style TargetType="local:MyCustomControl" >
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="local:MyCustomControl">
                <Border
                    Background="{TemplateBinding Background}"
                    BorderBrush="{TemplateBinding BorderBrush}"
                    BorderThickness="{TemplateBinding BorderThickness}">
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{TemplateBinding FirstName}" Margin="8 8 2 8" />
                        <Button Content="Go!" Click="MyCustomControl_Click" />
                    </StackPanel>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
</ResourceDictionary>

MyCustomContro.cs:

public string FirstName
    {
        get { return (string)GetValue(FirstNameProperty); }
        set { SetValue(FirstNameProperty, value); }
    }

    public static readonly DependencyProperty FirstNameProperty =
        DependencyProperty.Register("FirstName", typeof(string), typeof(MyCustomControl), new PropertyMetadata(string.Empty));

public event EventHandler Click;

MainPage.xaml :( Project1)

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <controls:MyCustomControl Width="400" Height="35" Background="Orange" 
    Margin="20" FirstName="MyFName" LastName="MyLName" Click="MyCustomControl_Click"/>

    <Button Content="Show!" x:Name="Text1" />
</Grid>

我希望访问的视图在Project1中可用,因此我想在MainPage.xaml.cs上编写代码来加载这些内容或框架 .

1 回答

  • 3

    如何将按钮单击事件添加到模板控件

    为该按钮添加一个名称,以便您可以访问后面代码中的对象

    <ResourceDictionary
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:UWP.CustomControls.Library">
    
        <Style TargetType="local:MyCustomControl" >
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="local:MyCustomControl">
                        <Border
                            Background="{TemplateBinding Background}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}">
                            <StackPanel Orientation="Horizontal">
                                <TextBlock Text="{TemplateBinding FirstName}" Margin="8 8 2 8" />
                                <Button Name:"_BtnGo" Content="Go!" Click="MyCustomControl_Click" />
                            </StackPanel>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
        </ResourceDictionary>
    

    添加了一个指向按钮控件的指针,并将按钮事件传递给控件中的事件处理程序

    private  Button _BtnGo;
    
    public string FirstName
        {
            get { return (string)GetValue(FirstNameProperty); }
            set { SetValue(FirstNameProperty, value); }
        }
    
        public static readonly DependencyProperty FirstNameProperty =
            DependencyProperty.Register("FirstName", typeof(string), typeof(MyCustomControl), new PropertyMetadata(string.Empty));
    
    public event EventHandler Click;
    
        public event EventHandler<RoutedEventArgs> GoClicked;
    
    
         protected override void OnApplyTemplate()
            {
            _BtnGo = GetTemplateChild(nameof(_BtnGo)) as Button;
            _BtnGo.Click += (s, e) => GoClicked?.Invoke(s, e);
        }
    

相关问题