如何使用 C# 而不是 XAML 向标签添加触发器?



这是我拥有的 XAML 代码:

<Label x:Name="faveLabel" FontFamily="FontAwesome" 
XAlign="Center" FontSize="23">
<Label.Triggers>
<DataTrigger TargetType="Label" Binding="{Binding Favorite}" Value="true">
<Setter Property="TextColor" Value="Red"/>
</DataTrigger>
<DataTrigger TargetType="Label" Binding="{Binding Favorite}" Value="false">
<Setter Property="TextColor" Value="Gray"/>
</DataTrigger>
</Label.Triggers>
</Label>

我想做的是将其更改为 C#

var label = new Label ()
{
FontFamily = "FontAwesome",
HorizontalTextAlignment = TextAlignment.Center,
FontSize = 23,
}
var labelTrigger = new DataTrigger(label) 
{
Target

}

我尝试在下面开始执行此操作,但是在定义外部标签后不久,我意识到我不知道如何定义触发器。谁能给我建议如何做到这一点?

我没有测试这个,但这应该会让你走上正轨:

// Trigger for Favorite = true
DataTrigger triggerTrue = new DataTrigger(typeof(Label));
triggerTrue.Value = true;
triggerTrue.Binding = new Binding() { Path = "Favorite" };
Setter setterTrue = new Setter();
setterTrue.Property = Label.TextColorProperty;
setterTrue.Value = Color.Red;
triggerTrue.Setters.Clear();
triggerTrue.Setters.Add(setterTrue);
label.Triggers.Add(triggerTrue);
// Trigger for Favorite = false    
DataTrigger triggerFalse = new DataTrigger(typeof(Label));
triggerFalse.Value = false;
triggerFalse.Binding = new Binding() { Path = "Favorite" };
Setter setterFalse = new Setter();
setterFalse.Property = Label.TextColorProperty;
setterFalse.Value = Color.Red;
triggerFalse.Setters.Clear();
triggerFalse.Setters.Add(setterFalse);
label.Triggers.Add(triggerFalse);

来源: https://social.msdn.microsoft.com/Forums/vstudio/en-US/797753f4-5db2-4852-a9fb-1ed989fe6413/add-datatrigger-programmatically?forum=wpf

带有触发器的扩展按钮的示例,这些触发器基于 IsEnabled 属性更改按钮的样式:

public class ExtendedButton : Button
{
public static readonly BindableProperty EnabledStyleProperty = 
BindableProperty.Create(nameof(EnabledStyle),
typeof(Style),
typeof(ExtendedButton),
default(Style),
defaultBindingMode: BindingMode.TwoWay,
propertyChanged: OnEnabledStyleChanged);
public static readonly BindableProperty DisabledStyleProperty = 
BindableProperty.Create(nameof(DisabledStyle),
typeof(Style),
typeof(ExtendedButton),
default(Style),
defaultBindingMode: BindingMode.TwoWay,
propertyChanged: OnDisabledStyleChanged);
public ExtendedButton()
{
}
public Style EnabledStyle
{
get
{
return (Style)GetValue(EnabledStyleProperty);
}
set
{
SetValue(EnabledStyleProperty, value);
var enabledStyleTrigger = GetEnabledStyleTrigger();
this.Triggers.Clear();
this.Triggers.Add(enabledStyleTrigger);
}
}
public Style DisabledStyle
{
get
{
return (Style)GetValue(DisabledStyleProperty);
}
set
{
SetValue(DisabledStyleProperty, value);
var disabledStyleTrigger = GetDisabledStyleTrigger();
this.Triggers.Clear();
this.Triggers.Add(disabledStyleTrigger);
}
}
private static void OnEnabledStyleChanged(BindableObject bindable, object oldValue, object newValue)
{
var view = (ExtendedButton)bindable;
view.EnabledStyle = (Style)newValue;
}
private static void OnDisabledStyleChanged(BindableObject bindable, object oldValue, object newValue)
{
var view = (ExtendedButton)bindable;
view.DisabledStyle = (Style)newValue;
}
private Trigger GetDisabledStyleTrigger()
{
var disabledStyleTrigger = new Trigger(typeof(Button))
{
Property = Button.IsEnabledProperty,
Value = true
};
var buttonDisabledSetter = new Setter
{
Property = Button.StyleProperty,
Value = this.DisabledStyle
};
disabledStyleTrigger.Setters.Add(buttonDisabledSetter);
return disabledStyleTrigger;
}
private Trigger GetEnabledStyleTrigger()
{
var enabledStyleTrigger = new Trigger(typeof(Button))
{
Property = Button.IsEnabledProperty,
Value = true
};
var buttonEnabledSetter = new Setter
{
Property = Button.StyleProperty,
Value = this.EnabledStyle
};
enabledStyleTrigger.Setters.Add(buttonEnabledSetter);
return enabledStyleTrigger;
}
}
}

最新更新