[英]TextBox Text binding on a RadioButton Check event
我正在嘗試在RadioButton
檢查事件上綁定TextBox
文本:
[
我想要做的是:在選中“SAV”或“HORS CIRCUIT”或“AUCUNE”單選按鈕后,“Adr Mac”文本框變為空,使用以下 Xaml 代碼:
<TextBox x:Name="AdrMac_TxtBox">
<TextBox.Style>
<Style TargetType="{x:Type TextBox}">
<Setter Property="BorderBrush" Value="Black"/>
<Setter Property="Width" Value="100"/>
<Setter Property="HorizontalContentAlignment" Value="Left"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Padding" Value="5"/>
<Setter Property="Margin" Value="5"/>
<Setter Property="HorizontalAlignment" Value="Left"/>
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Background" Value="LightGray"/>
<Setter Property="Opacity" Value="0.5"/>
</Trigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=IsChecked,ElementName=None_Imprim_Rb}"
Value="True"/>
<Condition Binding="{Binding Path=IsChecked,ElementName=Sav_Rb_Checked}"
Value="True"/>
<Condition Binding="{Binding Path=IsChecked,ElementName=HC_Rb_Checked}"
Value="True"/>
</MultiDataTrigger.Conditions>
<Setter Property="Text" Value="{x:Static sys:String.Empty}"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
你能告訴我這段代碼有什么問題嗎?
Here's a simple example of a TextBox with two triggers, when either radio is selected it'll clear the TextBox text, please note the multiple <DataTrigger>
:
<TextBox Height="23" Width="120">
<TextBox.Style>
<Style TargetType="{x:Type TextBox}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsChecked, ElementName=rb_One}" Value="True">
<Setter Property="Text" Value="{x:Null}"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding IsChecked, ElementName=rb_Two}" Value="True">
<Setter Property="Text" Value="{x:Null}"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
<RadioButton x:Name="rb_One" Content="RadioButton" />
<RadioButton x:Name="rb_Two" Content="RadioButton" />
MultiDataTrigger
將僅在滿足所有條件時應用設置器。
表示在綁定數據滿足一組條件時應用屬性值或執行操作的觸發器。
您可以改為定義多個DataTrigger
,每個都作用於一個條件。
<Style.Triggers>
<!-- ...other tiggers. -->
<DataTrigger Binding="{Binding Path=IsChecked,ElementName=None_Imprim_Rb}" Value="True">
<Setter Property="Text" Value="{x:Static sys:String.Empty}"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsChecked,ElementName=Sav_Rb_Checked}" Value="True">
<Setter Property="Text" Value="{x:Static sys:String.Empty}"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsChecked,ElementName=HC_Rb_Checked}" Value="True">
<Setter Property="Text" Value="{x:Static sys:String.Empty}"/>
</DataTrigger>
</Style.Triggers>
如果您想防止冗余設置器,您可以創建一個布爾 OR多值轉換器。
public class BooleanOrConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
return values.Cast<bool>().Any(value => value);
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new InvalidOperationException();
}
}
然后您可以使用帶有MultiBinding
的DataTrigger
來實現相同的效果。
<TextBox x:Name="AdrMac_TxtBox">
<TextBox.Resources>
<local:BooleanOrConverter x:Key="BooleanOrConverter"/>
</TextBox.Resources>
<TextBox.Style>
<Style TargetType="{x:Type TextBox}">
<!-- ...your setters. -->
<Style.Triggers>
<!-- ...other triggers. -->
<DataTrigger Value="True">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource BooleanOrConverter}">
<Binding ElementName="None_Imprim_Rb" Path="IsChecked"/>
<Binding ElementName="Sav_Rb_Checked" Path="IsChecked"/>
<Binding ElementName="HC_Rb_Checked" Path="IsChecked"/>
</MultiBinding>
</DataTrigger.Binding>
<Setter Property="Text" Value="{x:Static sys:String.Empty}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.