如何将 EventTrigger 分配给其父项中的可重用 Button?
How do I assign an EventTrigger to a reusable Button in its parent?
我的可重用Button基本上是一个单独的按钮,其中ControlTemplate由一个TextBlock 和一张 图片 。 Text 属性 of TextBlock 绑定到要公开的 DependencyProperty;类似地,Source 属性 of Image 绑定到 DependencyProperty。这是此 Button.
的代码
<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 是前面提到的 DependecyProperty.
现在,我想在它的 "parent" 中使用这个 Button,一个 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>
但是,为了在单击 按钮 时添加反应(比如更改 Grid.ColumnSpan 属性 的 TextBlock "txtBlk" 到 2),我想做的其他事情是将 EventTriggers 分配给我的可重用 "parent" 中的按钮。我最初想到了两种方法,但其中 none 行得通。
- 在我的可重用 Button 中,将 Style.Triggers 绑定到 DependencyProperty 到接触它的"parent"。但是,弹出"The property Triggers does not have an accessible setter".
- 将我的可重用 Button 的 Style 移动到 ResourceDictionary 并分配一个 Key供"parent"使用。但是,通过这样做,我不确定如何处理我的两个 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>
我的可重用Button基本上是一个单独的按钮,其中ControlTemplate由一个TextBlock 和一张 图片 。 Text 属性 of TextBlock 绑定到要公开的 DependencyProperty;类似地,Source 属性 of Image 绑定到 DependencyProperty。这是此 Button.
的代码<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 是前面提到的 DependecyProperty.
现在,我想在它的 "parent" 中使用这个 Button,一个 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>
但是,为了在单击 按钮 时添加反应(比如更改 Grid.ColumnSpan 属性 的 TextBlock "txtBlk" 到 2),我想做的其他事情是将 EventTriggers 分配给我的可重用 "parent" 中的按钮。我最初想到了两种方法,但其中 none 行得通。
- 在我的可重用 Button 中,将 Style.Triggers 绑定到 DependencyProperty 到接触它的"parent"。但是,弹出"The property Triggers does not have an accessible setter".
- 将我的可重用 Button 的 Style 移动到 ResourceDictionary 并分配一个 Key供"parent"使用。但是,通过这样做,我不确定如何处理我的两个 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>