我希望能够使用EventTrigger设置属性,这有很多问题.
1)EventTriggers仅支持Actions,因此我必须使用storyBoard来设置我的属性.
2)一旦我使用故事板,我有两个选择:
在下面的示例中,我想在单击按钮时将IsChecked属性设置为False,并且我希望用户能够更改IsChecked和/或我希望能够更改代码中的属性.
例:
<EventTrigger
SourceName="myButton"
RoutedEvent="Button.Click">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<BooleanAnimationUsingKeyFrames
Storyboard.TargetName="myCheckBox"
Storyboard.TargetProperty="IsChecked"
FillBehavior="Stop">
<DiscreteBooleanKeyFrame
KeyTime="00:00:00"
Value="False" />
</BooleanAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
Run Code Online (Sandbox Code Playgroud)
我意识到在故事板完成后我可以使用"已完成"事件将值设置为False.但是,在这种情况下,我想在XAML中包含逻辑,因为此逻辑将用于自定义控件,并且仅特定于UI.
我有以下Template为我Button
<Window.Resources>
<DataTemplate x:Key="ItemTemplate">
<DockPanel Width="Auto">
<Button DockPanel.Dock="Top">
<Button.Template>
<ControlTemplate >
<Image Source="{Binding image}"/>
</ControlTemplate>
</Button.Template>
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<BeginStoryboard>
<Storyboard>
<local:GridLengthAnimation
Storyboard.TargetName="col1"
Storyboard.TargetProperty="Width"
LeftGridWidth="*" RightGridWidth="1*" Duration="0:0:2"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
</DockPanel>
</DataTemplate>
</Window.Resources>
<Grid>
...
...
<Grid Grid.Row="2" >
<Grid.ColumnDefinitions>
<ColumnDefinition Name="col1" Width="{Binding ElementName=root, Path=DataContext.gla.LeftGridWidth}" />
<ColumnDefinition Name="col2" Width="{Binding ElementName=root, Path=DataContext.gla.RightGridWidth}" />
</Grid.ColumnDefinitions>
<Grid x:Name="LeftGrid" Grid.Row="2" Grid.Column="0" >
<Border BorderThickness="1" BorderBrush="Red">
<ItemsControl ItemTemplate="{StaticResource ItemTemplate}" ItemsSource="{Binding ElementName=root, Path=DataContext._movies}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="5"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</Border> …Run Code Online (Sandbox Code Playgroud) 我有一个Popup包含"关闭"按钮.弹出窗口由切换按钮打开(其IsOpen属性绑定ToggleButton到此答案提供的).如何在按下按钮时关闭弹出窗口?这是我的XAML:
<Canvas x:Name="LayoutRoot">
<ToggleButton x:Name="ToggleButton"
Style="{DynamicResource ToggleButtonStyle}" Height="51" Canvas.Left="2.999" Width="50.333" IsHitTestVisible="{Binding ElementName=Popup, Path=IsOpen, Mode=OneWay, Converter={StaticResource BoolInverter}}"/>
<Popup x:Name="Popup" IsOpen="{Binding IsChecked, ElementName=ToggleButton}" StaysOpen="False" AllowsTransparency="True">
<Canvas Height="550" Width="550">
<Grid Height="500" Width="500" Canvas.Left="25" Canvas.Top="25" d:LayoutOverrides="Width, Height, Margin">
<Grid.Effect>
<DropShadowEffect BlurRadius="15" ShadowDepth="0"/>
</Grid.Effect>
<Grid.RowDefinitions>
<RowDefinition Height="0.132*"/>
<RowDefinition Height="0.868*"/>
</Grid.RowDefinitions>
<Rectangle x:Name="Background" Fill="#FFF4F4F5" Margin="0" Stroke="Black" RadiusX="6" RadiusY="6" Grid.RowSpan="2"/>
<Border x:Name="TitleBar" BorderThickness="1" Height="70" VerticalAlignment="Top" Margin="0,0.5,0,0" CornerRadius="5">
<DockPanel>
<TextBlock TextWrapping="Wrap" Text="FOOBAR POPUP TITLE" FontSize="24" FontFamily="Arial Narrow" Margin="17,0,0,0" d:LayoutOverrides="Height" VerticalAlignment="Center" …Run Code Online (Sandbox Code Playgroud) 我试图为支持拖放的列表框添加一些可视化反馈.好像我应该能够将一些setter添加到EventSetter并完成.但是,事件排定器不支持setter.我是否真的必须制作故事板才能实现此行为?
微软对此的理性是什么?
<Style TargetType="{x:Type ListBox}">
<Style.Triggers>
<EventTrigger RoutedEvent="DragEnter">
<!--WHy Can't i Add seters here? e.g.
<Setter Property="ForeColor" Value="Red">
-->
</EventTrigger>
</Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud) 在WPF中我希望有一个按钮,当它被点击时,它会打开或关闭一个Popup,具体取决于它是否已经打开(如果它已打开则关闭它,如果它已关闭则打开它),我想在XAML中完全执行此操作.这可能吗?
谢谢,
罗伊
wpf ×5
xaml ×2
.net ×1
button ×1
c# ×1
eventtrigger ×1
popup ×1
storyboard ×1
styles ×1
triggers ×1