如何编写 DataTrigger 以更新 WPF 文本框中标记 属性 的值?
How to Write DataTrigger to update the value of a Tag Property in a WPF TextBox?
我需要编写 DataTrigger 来更新 WPF 文本框中 Tag 属性 的值。
如果 TextBox Text.Count >0
则将 Tag
属性 更新为 True
否则 False
.
XAML Source Code:
<TextBox Text="WPF" Tag="True">
<TextBox.Triggers>
<DataTrigger Property="Text" Value="0">
<Setter Property="Tag" Value="False" />
</DataTrigger>
</TextBox.Triggers>
</TextBox>
DataTrigger
还没有属性。为此,您应该像这样使用 Property trigger
:
<TextBox Text="WPF" Tag="True">
<TextBox.Style>
<Style TargetType="TextBox">
<Style.Triggers>
<Trigger Property="Text" Value="0">
<Setter Property="Tag" Value="False" />
</Trigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
或者,如果您想根据文本长度更改 Tag
,您应该试试这个:
<Trigger Property="Text" Value="">
您的代码将无法运行,因为您无法将数据触发器放入控件的 Triggers
集合中。您实际需要的是控件 Style
.
中的触发器
试试这个:
<TextBox Text="WPF" Tag="True">
<TextBox.Style>
<Style TargetType="{x:Type TextBox}">
<Style.Triggers>
<DataTrigger Value="0"
Binding="{Binding Text.Length, RelativeSource={RelativeSource Self}}">
<Setter Property="Tag" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
请注意,这并非万无一失:例如,如果文本框仅包含空格,那么它可能看起来是空的,但文本的长度将大于零。
正如 user2946329 和 ATM 的回答所示,在 <Style>
触发器中有多种方法可以做到这一点。
您将必须执行与此类似的操作:
这里我描述了一个样式并将其附加到一个控件上。
<Style TargetType="telerik:BarIndicator" x:Key="Percent">
<Style.Resources>
<vc:LoadPercentValueConverter x:Key="LPValueConverter"/>
</Style.Resources>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=myEngine.PercentLoaded, Converter={StaticResource LPValueConverter}}" Value="1" >
<Setter Property="Background" Value="Red"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding Path=myEngine.PercentLoaded, Converter={StaticResource LPValueConverter}}" Value="0" >
<Setter Property="Background" Value="Green"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
这里是控件:
<telerik:BarIndicator Style="{StaticResource Percent}" Visibility="{Binding WhileLoading}" Value="{Binding Path=myEngine.PercentLoaded}" StartWidth="0.13"/>
而且你必须使用值转换器。这是我的。
class LoadPercentValueConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
long percent = (long)System.Convert.ChangeType(value, typeof(long));
if (percent > 80)
{
return 1;
}
else
{
return 0;
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
我使用了 StevenRands 的答案并改编了我自己的答案:
在此示例中,如果 Text 为 null 或为空,则 Tag 将为 false。
<StackPanel>
<TextBox Text="WPF" Name="tb">
<TextBox.Style>
<Style TargetType="{x:Type TextBox}">
<Setter Property="Tag" Value="True"/>
<Style.Triggers>
<DataTrigger Value="" Binding="{Binding Text, RelativeSource={RelativeSource Self}}">
<Setter Property="Tag" Value="False" />
</DataTrigger>
<DataTrigger Value="{x:Null}" Binding="{Binding Text, RelativeSource={RelativeSource Self}}">
<Setter Property="Tag" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
<!-- YOU CAN CHECK THE TAG'S VALUE HERE-->
<TextBlock Text="{Binding ElementName=tb, Path=Tag}"/>
</StackPanel>
这里是 StevenRands 更好的答案,并进行了一些更改以使其有效:
<TextBox Text="WPF">
<TextBox.Style>
<Style TargetType="{x:Type TextBox}">
<Setter Property="Tag" Value="True"/>
<Style.Triggers>
<DataTrigger Value="0" Binding="{Binding Text.Length, RelativeSource={RelativeSource Self}}">
<Setter Property="Tag" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
我需要编写 DataTrigger 来更新 WPF 文本框中 Tag 属性 的值。
如果 TextBox Text.Count >0
则将 Tag
属性 更新为 True
否则 False
.
XAML Source Code:
<TextBox Text="WPF" Tag="True">
<TextBox.Triggers>
<DataTrigger Property="Text" Value="0">
<Setter Property="Tag" Value="False" />
</DataTrigger>
</TextBox.Triggers>
</TextBox>
DataTrigger
还没有属性。为此,您应该像这样使用 Property trigger
:
<TextBox Text="WPF" Tag="True">
<TextBox.Style>
<Style TargetType="TextBox">
<Style.Triggers>
<Trigger Property="Text" Value="0">
<Setter Property="Tag" Value="False" />
</Trigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
或者,如果您想根据文本长度更改 Tag
,您应该试试这个:
<Trigger Property="Text" Value="">
您的代码将无法运行,因为您无法将数据触发器放入控件的 Triggers
集合中。您实际需要的是控件 Style
.
试试这个:
<TextBox Text="WPF" Tag="True">
<TextBox.Style>
<Style TargetType="{x:Type TextBox}">
<Style.Triggers>
<DataTrigger Value="0"
Binding="{Binding Text.Length, RelativeSource={RelativeSource Self}}">
<Setter Property="Tag" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
请注意,这并非万无一失:例如,如果文本框仅包含空格,那么它可能看起来是空的,但文本的长度将大于零。
正如 user2946329 和 ATM 的回答所示,在 <Style>
触发器中有多种方法可以做到这一点。
您将必须执行与此类似的操作:
这里我描述了一个样式并将其附加到一个控件上。
<Style TargetType="telerik:BarIndicator" x:Key="Percent">
<Style.Resources>
<vc:LoadPercentValueConverter x:Key="LPValueConverter"/>
</Style.Resources>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=myEngine.PercentLoaded, Converter={StaticResource LPValueConverter}}" Value="1" >
<Setter Property="Background" Value="Red"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding Path=myEngine.PercentLoaded, Converter={StaticResource LPValueConverter}}" Value="0" >
<Setter Property="Background" Value="Green"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
这里是控件:
<telerik:BarIndicator Style="{StaticResource Percent}" Visibility="{Binding WhileLoading}" Value="{Binding Path=myEngine.PercentLoaded}" StartWidth="0.13"/>
而且你必须使用值转换器。这是我的。
class LoadPercentValueConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
long percent = (long)System.Convert.ChangeType(value, typeof(long));
if (percent > 80)
{
return 1;
}
else
{
return 0;
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
我使用了 StevenRands 的答案并改编了我自己的答案:
在此示例中,如果 Text 为 null 或为空,则 Tag 将为 false。
<StackPanel>
<TextBox Text="WPF" Name="tb">
<TextBox.Style>
<Style TargetType="{x:Type TextBox}">
<Setter Property="Tag" Value="True"/>
<Style.Triggers>
<DataTrigger Value="" Binding="{Binding Text, RelativeSource={RelativeSource Self}}">
<Setter Property="Tag" Value="False" />
</DataTrigger>
<DataTrigger Value="{x:Null}" Binding="{Binding Text, RelativeSource={RelativeSource Self}}">
<Setter Property="Tag" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
<!-- YOU CAN CHECK THE TAG'S VALUE HERE-->
<TextBlock Text="{Binding ElementName=tb, Path=Tag}"/>
</StackPanel>
这里是 StevenRands 更好的答案,并进行了一些更改以使其有效:
<TextBox Text="WPF">
<TextBox.Style>
<Style TargetType="{x:Type TextBox}">
<Setter Property="Tag" Value="True"/>
<Style.Triggers>
<DataTrigger Value="0" Binding="{Binding Text.Length, RelativeSource={RelativeSource Self}}">
<Setter Property="Tag" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>