【问题标题】:multidatatrigger with multibinding in ControlTemplate.Triggers在 ControlTemplate.Triggers 中具有多重绑定的 multidatatrigger
【发布时间】:2014-05-05 12:00:09
【问题描述】:

如果绑定属性之一为真,我想用一个返回真的转换器来触发。

喜欢这个

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。有谁知道谁来修复这个多重绑定?

我也试过了

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

但这也行不通

【问题讨论】:

    标签: c# wpf binding


    【解决方案1】:

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

    <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>
    

    【讨论】:

      猜你喜欢
      • 2014-01-26
      • 1970-01-01
      • 2015-03-15
      • 1970-01-01
      • 1970-01-01
      • 2016-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多