一直以来 下面的写法都是错的
<Button Content="开始测试" Width="100" Margin="10" Height="50" Click="button_test_Click">
<Button.Triggers>
<DataTrigger Binding="{Binding IsTest}" Value="True" >
<Setter Property="Content" Value="停止测试"/>
</DataTrigger>
</Button.Triggers>
</Button>
报错为 “Triggers 集合成员必须是类型EventTriggers”
使用 style
<Button Content="开始测试" Width="100" Margin="10" Height="50" Click="button_test_Click">
<Button.Style>
<Style TargetType="Button">
<Style.Triggers>
<DataTrigger Binding="{Binding IsTest}" Value="True" >
<Setter Property="Content" Value="停止测试"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
一点效果都没有
今天终于发现,下面才是正解
<Button Width="100" Margin="10" Height="50" Click="button_test_Click">
<Button.Style>
<Style TargetType="Button">
<Setter Property="Content" Value="开始测试"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsTest}" Value="True" >
<Setter Property="Content" Value="停止测试"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
动作流程:
1.设置的是 Style 的 Triggers, 当 IsTest=True 时,改变的是 Style 里面的 <Setter Property="Content" Value="停止测试"/>
2. Style 中的 Setter 变化了, 对应 Button 中的属性 也被同时改变。
代码1 中, 虽然设置了Style, 但也设置了 Button.Content, 导致 Style 中的 <Setter Property="Content"/> 无效
自然,就算 IsTest=True,Style 中的 Setter 变化了, 也没用。 因为永远以 Button.Content 为最后设置值
真的不理解微软为啥 “Triggers 集合成员必须是类型EventTriggers”
Style.Triggers 都能 有DataTrigger
一直以来 下面的写法都是错的 &lt;Button Content="开始测试" Width="100" Margin="10" Height="50" Click="button_test_Click"&gt; &lt;Button.Triggers&gt; &lt;DataTrigger Binding=&quo
<Style x:Key="playBtn" TargetType="{x:Type control:
Button
WithIcon}">
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="Width" Value="28"/>
在样式中(Style.
Trigger
s集合)
在数据模板中(
Data
Template.
Trigger
s集合)
在控件模板中(ControlTemplate.
Trigger
s集合)
直接在元素中定义触发器(FrameworkElement.
Trigger
s集合)
直接在元素中定义的触发器仅支持事件触发器,若在其中定义其他触发器,则会报如下错误:“
Trigger
s集合成员必须是Enter
Trigger
”.
其他触发器集合的功能更强大,他们支持三种基本类型的触发器:
wpf
中,根据数据的值的不同,UI的界面随之改变(显示控件、隐藏控件以及改变控件的其它属性),
这时我们可以用
Data
Trigger
数据触发器。
下面两个案例实现同样的功能,当条件(数据的值)不同时,显示不同的按钮。
创建 Core类:
using System;
using System.Collections.Generic;
using Syste...
这一篇,总结
Trigger
s。
FrameworkElement、Style、ControlTemplate和
Data
Template都具有一个类型为
Trigger
Collection 的
Trigger
s属性,
Trigger
Collection继承自: Collection<
Trigger
Base>,所以它们都有一个触发器的集合。
触发器可以在xaml中...
假设我们有两个文本框,需要输入姓名和年龄,且两项为必须输入的字段。这时候我们可以利用Validation类扩展自己的数据验证,同时将验证结果绑定到
Button
的IsEnabled属性上,当两个TextBox输入的值通过数据验证后,
Button
才可用。
首先,我们创建两个数据验证类
public class NameValidationRule : ValidationRule
public override ValidationResult Validate(object
Trigger
s 可以作为Style和ControlTemplate的一个属性来进行设置,该属性的类型为
Trigger
Collection,它是
Trigger
Base的一个集合,。
wpf
中 我想实现这样一个功能:combox绑定了一个list<string>,listbox的显示内容用CheckBox展示出来,listbox的选项与combox下拉框选项一样,当选择combox的一个选项后,listbox的相同内容变为不可选中,如何实现
您可以
使用
WPF
的
Data
Template和
Data
Trigger
来实现此功能。首先,您需要创建一个
Data
Template,其中包含一个CheckBox和一个TextBlock,用于显示列表中的字符串。然后,您可以
使用
Data
Trigger
来检测ComboBox的选择,并将相应的列表项设置为不可选中。以下是一个简单的示例代码:
<ComboBox x:Name="myComboBox" ItemsSource="{Binding myStringList}">
<ComboBox.ItemTemplate>
<
Data
Template>
<TextBlock Text="{Binding}" />
</
Data
Template>
</ComboBox.ItemTemplate>
</ComboBox>
<ListBox ItemsSource="{Binding myStringList}">
<ListBox.ItemTemplate>
<
Data
Template>
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding IsSelected}" />
<TextBlock Text="{Binding}" />
</StackPanel>
</
Data
Template>
</ListBox.ItemTemplate>
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Style.
Trigger
s>
<
Data
Trigger
Binding="{Binding ElementName=myComboBox, Path=SelectedItem}" Value="{Binding}">
<Setter Property="IsEnabled" Value="False" />
</
Data
Trigger
>
</Style.
Trigger
s>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
在这个示例中,ComboBox绑定了一个名为“myStringList”的字符串列表。ListBox也绑定了同一个列表,并
使用
Data
Template来显示每个字符串。当ComboBox选择一个项目时,
Data
Trigger
会检测到选择的项目,并将ListBox中相应的项目设置为不可选中。