C# 在触发器中,可以测试另一个属性的值吗?
触发器的C# 在触发器中,可以测试另一个属性的值吗?,c#,wpf,triggers,conditional-statements,C#,Wpf,Triggers,Conditional Statements,触发器的值属性是否可以基于元素的属性 例如,在具有滚动条的控件模板中,如果其最小值和最大值属性相等,我试图将其可见性属性设置为折叠的 但是,由于触发器不是依赖对象,因此无法将绑定设置为触发器的值,因此以下操作不起作用 <Trigger Property="Minimum" SourceName="PART_ScrollBar" Value="{Binding Maximum, SourceName=PART_ScrollBar}"> <Setter P
值
属性是否可以基于元素的属性
例如,在具有滚动条的控件模板中,如果其最小值和最大值属性相等,我试图将其可见性属性设置为折叠的
但是,由于触发器
不是依赖对象,因此无法将绑定
设置为触发器的值
,因此以下操作不起作用
<Trigger Property="Minimum"
SourceName="PART_ScrollBar"
Value="{Binding Maximum, SourceName=PART_ScrollBar}">
<Setter Property="Visibility"
TargetName="PART_ScrollBar"
Value="Collapsed" />
</Trigger>
那么,这可以完全通过触发器来完成,还是必须在代码隐藏中完成呢?在这种情况下,我建议创建一个自定义行为
像这样
public class MinMaxVisibilityBehavior : Behavior<ScrollBar>
{
public override void OnAttached()
{
DependencyPropertyDescriptor
.FromProperty(ScrollBar.MaximumProperty, typeof(ScrollBar))
.AddValueChanged(AssociatedObject, CheckMinMax);
DependencyPropertyDescriptor
.FromProperty(ScrollBar.MinimumProperty, typeof(ScrollBar))
.AddValueChanged(AssociatedObject, CheckMinMax);
}
private void CheckMinMax(object sender, EventArgs e)
{
AssociatedObject.Visibility = AssociatedObject.Minimum ==
AssociatedObject.Maximum ? Visibility.Hidden : Visibility.Visible;
}
}
公共类MinMaxVisibilityBehavior:Behavior
{
公共覆盖无效附加()
{
DependencyPropertyDescriptor
.FromProperty(滚动条.MaximumProperty,类型(滚动条))
.AddValueChanged(关联对象,检查最小值);
DependencyPropertyDescriptor
.FromProperty(滚动条.MinimumProperty,类型(滚动条))
.AddValueChanged(关联对象,检查最小值);
}
私有void CheckMinMax(对象发送方,事件参数e)
{
AssociatedObject.Visibility=AssociatedObject.Minimum==
关联对象。最大?可见性。隐藏:可见性。可见;
}
}
然后在你的XAML中
<ScrollBar>
........
<i:Interaction.Behaviors>
<local:MinMaxVisibilityBehavior />
</i:Interaction.Behaviors>
</ScrollBar>
........
当最大值
和最小值
相同时,应将可见性
设置为折叠
?是。问题是将最大值(或最小值)放入触发器的值测试部分。我认为那是不可能的。如图所示,您不能使用绑定,我也不知道其他方法。我能想到的唯一一件事是自定义可见性转换器,这很容易,但我正在尝试看看我是否可以在模板中不使用代码就完成它。如果最小值
和最大值
相等,则布尔ViewModel属性(ScrollVisible
?)为false,否则为true(尽管这要求您记住在更改最小值
或最大值
时调用滚动可见
上的PropertyChanged),或使用多值转换器。修改ViewModel将不起作用,因为我正在创建一个处理自定义滚动的第三方控件,因此它不知道ViewModel。此外,这与布局相关,因此它不会出现在ViewModel中。我知道如何使用多值转换器,但正如我所说的,我想知道它是否可以我完全是在XAML中用触发器完成的。我猜不是。啊…我真的很喜欢人们在投票时没有任何信息或评论来说明原因。这是成为一个好的S.O.公民的方式,伙计(或女孩!)