假设我要展示基于从DataContext的属性的值/隐藏的元素,我怎么能acheive呢?
// In MainWindow.xaml.cs: DataContext of MainWindow.xaml
public int Mode { get; set; }
Run Code Online (Sandbox Code Playgroud)
在XAML,我想给出一个对隐藏要素Mode
.我怎样才能完成以下工作?或者实现这个的适当方式是什么?
<StackPanel>
<StackPanel.Triggers>
<Trigger Property="Mode" Value="1">
<Setter TargetName="txt1" Property="Visibility" Value="Visible" />
<Setter TargetName="txt2" Property="Visibility" Value="Collapsed" />
<Setter TargetName="txt3" Property="Visibility" Value="Visible" />
</Trigger>
<Trigger Property="Mode" Value="2">
<Setter TargetName="txt1" Property="Visibility" Value="Collapsed" />
<Setter TargetName="txt2" Property="Visibility" Value="Visible" />
<Setter TargetName="txt3" Property="Visibility" Value="Collapsed" />
</Trigger>
</StackPanel.Triggers>
<TextBlock Text="TextBlock 1" x:Name="txt1" />
<TextBlock Text="TextBlock 2" x:Name="txt2" />
<TextBlock Text="TextBlock 3" x:Name="txt3" />
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
目前,我得到的错误是" 物业'模式’在类型'的StackPanel’未找到d:\ tmp目录\ WpfApplication1\TriggersAndProperties\MainWindow.xaml. "
Jul*_*ain 12
如果需要DataTriggers
可以在绑定上工作的触发器,则需要使用.问题是,DataTriggers
仅在样式和模板上可用,因此您需要定义如下:
<StackPanel>
<StackPanel.Style>
<Style TargetType="{x:Type StackPanel}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Mode}" Value="1">
<Setter TargetName="txt1" Property="Visibility" Value="Visible" />
<Setter TargetName="txt2" Property="Visibility" Value="Collapsed" />
<Setter TargetName="txt3" Property="Visibility" Value="Visible" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=Mode}" Value="2">
<Setter TargetName="txt1" Property="Visibility" Value="Collapsed" />
<Setter TargetName="txt2" Property="Visibility" Value="Visible" />
<Setter TargetName="txt3" Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
</StackPanel.Style>
<TextBlock Text="TextBlock 1" x:Name="txt1" />
<TextBlock Text="TextBlock 2" x:Name="txt2" />
<TextBlock Text="TextBlock 3" x:Name="txt3" />
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
另一种解决方案是使用IValueConverter
了INT从转换Mode
到Visibility
你想要的,并直接将其应用到每个文本块Visibility
属性.
请注意,Dean Chalk的答案仍然有效:如果您想要更改,则必须使用DependencyProperty
或执行.INotifyPropertyChanged
Mode
归档时间: |
|
查看次数: |
10684 次 |
最近记录: |