我正在尝试设置按钮的事件,仅使用XAML更改网格的可见性。我很确定我应该使用EventTrigger,但是我无法使用它,所以我最近的尝试是创建一个绑定到视图模型中的字段的DataTrigger:
<Style x:Key="PersonalInfoGridStyle" TargetType="{x:Type Grid}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=PersonalInfoGridVisibility}" Value="Collapsed">
<Setter Property="Grid.Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
上面的代码不起作用,但对于我来说,仅仅在XAML中实现整个事情(不使用视图模型或代码隐藏)对我来说并不重要。
有人可以解释我应该如何解决这个问题,或者甚至是否可能? :)感谢前方
答案 0 :(得分:11)
您可以使用切换按钮吗?
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.Resources>
<BooleanToVisibilityConverter x:Key="boolConverter" />
</Grid.Resources>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<ToggleButton Content="Click Me" x:Name="toggleMe" Grid.Row="0" />
<Grid Grid.Row="1" Background="Black" Visibility="{Binding ElementName=toggleMe, Path=IsChecked, Converter={StaticResource boolConverter}}">
</Grid>
</Grid>
</Window>
答案 1 :(得分:2)
好的,我想出了我将如何做到这一点(使用视图模型)。我在Visibility类型的视图模型中创建了一个对象(NOT STRING),然后我使用Grid中的Binding属性将网格中的Visibility属性绑定到视图模型中的Visibility对象。
现在我需要做的就是让按钮的事件将可见性对象(ONE LINE!)更改为可见,如下所示:
<Grid Visibility="{Binding Path=GridVisibility">
[content here]
</Grid>
在视图模型中:
private Visibility _gridVisibility = Visibility.Visible;
public Visibility GridVisibility
{
get
{
return _gridVisibility;
}
}
使用您的MVVM方法自己设置属性(我故意将其保留)。
最后,只需将按钮的click事件绑定到一个方法,该方法只需将GridVisibility的值更改为Visibility.Hidden或Visibility.Collapsed。
答案 2 :(得分:1)
您可以使用EventTrigger在纯xaml中执行此操作。
<Window x:Class="WpfApp3.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<StackPanel Width="64" VerticalAlignment="Center">
<Grid x:Name="grd" Background="Black" Height="48"/>
<Button Height="48" Content="Hide Grid">
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<BeginStoryboard>
<Storyboard>
<ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetName="grd" Storyboard.TargetProperty="Visibility">
<DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Hidden}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
</StackPanel>