我如何分配一个EventTrigger到一个可重用的按钮在它的父
本文关键字:一个 按钮 何分配 EventTrigger 分配 | 更新日期: 2023-09-27 18:07:32
我的可重用按钮基本上是一个单一的按钮,其中ControlTemplate由TextBlock和Image组成。TextBlock的Text属性绑定到要暴露的DependencyProperty;类似地,Image的Source属性绑定到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>
其中ScreenTitle和ScreenIcon是前面提到的 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文件的代码隐藏。
还有其他解决方法吗?
我最终通过直接覆盖它的触发器来解决这个问题。代码如下:
<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>