【问题标题】:DataTrigger setter called only onceDataTrigger setter 只调用一次
【发布时间】:2019-01-04 00:32:37
【问题描述】:

我有以下风格。我的问题是,即使多重绑定总是正确的,我只在加载 Window 时观察 setter 一次。每当我更改窗口高度时,都会调用这个 MyMultiValueConverter,我可以在日志中看到它,但看不到“”。

<Style x:Key="SeperatorRectangleStyle" TargetType="Rectangle">
    <Setter Property="Width" Value="2"/>
    <Setter Property="Height" Value="50"/>
    <Setter Property="MinHeight" Value="49"/>
    <Style.Triggers>
        <DataTrigger Value="True">
            <DataTrigger.Binding>
                <MultiBinding Converter="{StaticResource myTheMultiValueConverter}">
                    <Binding RelativeSource="{RelativeSource AncestorType={x:Type Window}, Mode=FindAncestor}" Path="ActualHeight"/>
                    <Binding RelativeSource="{RelativeSource AncestorType={x:Type Window}, Mode=FindAncestor}" Path="Name"/>
                </MultiBinding>
            </DataTrigger.Binding>
            <Setter Property="Height" Value="{Binding Converter={StaticResource mySeperatorHeightConverter}, ConverterParameter=DataTrigger}"/>

        </DataTrigger>
    </Style.Triggers>
</Style>

MyMultiValueConverter 是:

class TheMultiValueConverter : IMultiValueConverter
            {
                public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
                {
                   foreach (var i in values)
                  {
                      Console.WriteLine("TheMultiValueConverter values" + i);
                  }
                  Console.WriteLine("");
                   return true 
            }
}

MySeperatorHeightConverter 是

    class SeperatorHeightConverter : IValueConverter
        {
            public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
            {
                Console.WriteLine("!-!- SeperatorHeightConverter: " + parameter);
                return 100;
            }
    }

【问题讨论】:

    标签: wpf binding setter datatrigger


    【解决方案1】:

    您的代码中的问题是您将某些东西绑定到不改变的高度。这就是第二个转换器没有被触发的原因。

    查看此代码:

     <Setter Property="Height" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}, Path=ActualHeight, Converter={StaticResource mySeperatorHeightConverter}, ConverterParameter=DataTrigger}"/>
    

    这个小改动使得SeperatorHeightConverter 在每次窗口高度变化时都会被触发。

    【讨论】:

    • 非常感谢。我并没有真正意识到我实际上并没有将动态的东西绑定到高度。
    猜你喜欢
    • 2021-11-28
    • 2021-12-12
    • 2016-10-18
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    • 2016-08-18
    • 2013-01-09
    • 1970-01-01
    相关资源
    最近更新 更多