我如何分配一个EventTrigger到一个可重用的按钮在它的父

本文关键字:一个 按钮 何分配 EventTrigger 分配 | 更新日期: 2023-09-27 18:07:32

我的可重用按钮基本上是一个单一的按钮,其中ControlTemplateTextBlockImage组成。TextBlockText属性绑定到要暴露的DependencyProperty;类似地,ImageSource属性绑定到DependencyProperty。下面是这个按钮的代码。

<Button x:Class="Core.Resource.UserControlResource.NavigationButton1"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:local="clr-namespace:Core.Resource.UserControlResource"
         mc:Ignorable="d" 
         x:Name="myself">
<Button.Style>
    <Style TargetType="{x:Type Button}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="63"></ColumnDefinition>
                            <ColumnDefinition Width="63"></ColumnDefinition>
                        </Grid.ColumnDefinitions>
                        <Image Name="IconImage" Height="42" Width="42" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Source="{Binding ElementName=myself, Path=ScreenIcon}" />
                        <TextBlock Grid.Column="1" Text="{Binding ElementName=myself, Path=ScreenTitle}" FontSize="25" TextWrapping="Wrap" VerticalAlignment="Center"/>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Button.Style>

其中ScreenTitleScreenIcon是前面提到的 dependdecyproperty

现在,我想使用这个按钮在它的"父",一个UserControl。代码就像
<UserControl x:Class="Core.ParentControl"
         x:Name="parent"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
 xmlns:usrCtrlResrc="clr-namespace:Core.Resource.UserControlResource;assembly=Core.Resource"
 xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
         >
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="32"/>
        <ColumnDefinition Width="32"/>
    <Grid.ColumnDefinitions>
    <usrCtrlResrc:NavigationButton1 ScreenTitle="sample Screen Title" ScreenIcon="/Core.Resource;component/MediaResource/pencilEdit.png">
    <TextBlock Grid.Column="1" Name="txtBlk" Text="SampleSample"/>
</Grid>

然而,为了在按钮被点击时添加反应(比如改变网格)。TextBlock"txtBlk"的ColumnSpan属性2),我想做的是分配EventTriggers到我的可重用的按钮在"父"。我最初想到了两种方法,但没有一种可行。
    在我可重用的按钮中,绑定样式。将触发到DependencyProperty以暴露给它的"父属性"。但是,它会弹出"属性Triggers没有可访问的setter"。
  • 将可重用的按钮样式移动到ResourceDictionary并分配一个供"父"使用。然而,通过这样做,我不确定如何处理我的两个DependencyProperty,因为它不应该有ResourceDictionary文件的代码隐藏。

还有其他解决方法吗?

我如何分配一个EventTrigger到一个可重用的按钮在它的父

我最终通过直接覆盖它的触发器来解决这个问题。代码如下:

<usrCtrlResrc:NavigationButton1 ScreenTitle=... ScreenIcon=...>
    <usrCtrlResrc:NavigationButton1.Triggers>
        <EventTrigger RoutedEvent="usrCtrlResrc:NavigationButton1.Click">
            <EventTrigger.Actions>
                <BeginStoryboard>
                    <Storyboard>
                        ...
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger.Actions>
        </EventTrigger>
    </usrCtrlResrc:NavigationButton1.Triggers>
</usrCtrlResrc:NavigationButton1>