gpt4 book ai didi

c# - ControlTemplate.Triggers 中具有多重绑定(bind)的 multidatatrigger

转载 作者:行者123 更新时间:2023-12-01 18:54:16 25 4
gpt4 key购买 nike

我想使用转换器创建一个触发器,如果​​绑定(bind)属性之一为 true,则该转换器返回 true。

像这样

public class TestConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if (values != null && values.All(x => x is bool))
return values.OfType<bool>().Any(x => x);
return false;
}

public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}

并在按钮中实现它

    <Button Width="100" Height="100" Content="CONTENT">
<Button.Template>
<ControlTemplate TargetType="Button">
<Grid Background="{TemplateBinding Background}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
<ControlTemplate.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Value="True" >
<Condition.Binding>
<MultiBinding>
<MultiBinding.Converter>
<WpfApplication2:TestConverter />
</MultiBinding.Converter>
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Button.IsMouseOver"></Binding>
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Button.IsKeyboardFocusWithin"></Binding>
</MultiBinding>
</Condition.Binding>
</Condition>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="Foreground" Value="White" />
</MultiDataTrigger.Setters>
</MultiDataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Button.Template>
</Button>

但是我在转换器中获得的唯一值是 DependencyProperty.Unsetvalue。有谁知道谁来修复这个多重绑定(bind)?

我也尝试过

<Binding RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type Button}}" Path="IsMouseOver"></Binding>
<Binding RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type Button}}" Path="IsKeyboardFocusWithin"></Binding>

但这也行不通

最佳答案

您需要将 Binding 更改为 {RelativeSource Self} 并从 Binding.Path 中删除 Button >。另一件事是您实际上并不需要 MultiTrigger。 DataTriggerMultiBinding 在您的情况下就足够了:

<Button Width="100" Height="100" Content="CONTENT">
<Button.Template>
<ControlTemplate TargetType="Button">
<Grid Background="{TemplateBinding Background}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
<ControlTemplate.Triggers>
<DataTrigger Value="True">
<DataTrigger.Binding>
<MultiBinding>
<MultiBinding.Converter>
<WpfApplication2:TestConverter />
</MultiBinding.Converter>
<Binding RelativeSource="{RelativeSource Self}" Path="IsMouseOver"></Binding>
<Binding RelativeSource="{RelativeSource Self}" Path="IsKeyboardFocusWithin"></Binding>
</MultiBinding>
</DataTrigger.Binding>
<Setter Property="Foreground" Value="White" />
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Button.Template>
</Button>

关于c# - ControlTemplate.Triggers 中具有多重绑定(bind)的 multidatatrigger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23471902/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com