数据更改时不会调用Value Converter

时间:2010-08-18 17:33:35

标签: c# wpf wpf-controls

我现在正在开发用户控件,其中我有一个路径作为控件的一部分。根据某些数据的值,我可能想要显示3条可能的路径。为了确定我想要使用哪个路径,我有一个值转换器,它接收数据并返回一个数字来表示我应该使用哪条路径。

我的第一个想法是从我从中获取数据的两个依赖项属性中使用属性更改回调,但这些回调必须是静态的,并且XAML代码始终是非静态的。

我的第二次尝试是现在使用带有上述值转换​​器的数据触发器。以下是我的代码。

               <Path x:Name="path" Stretch="Fill" Width="111.75" Height="118.718" Data="F1M205.917,103.0088C189.333,93.8108,170.128,88.9998,150,88.9998C129.873,88.9998,110.584,93.8108,94.167,102.8408L116.1,144.2508L150,208.7178L183.9,144.2508z" Canvas.Left="0" Canvas.Top="0">
                <Path.Resources>
                    <Style TargetType="{x:Type Path}">
                        <Style.Triggers>
                            <DataTrigger Value="-1">
                                <DataTrigger.Binding>
                                    <MultiBinding Converter="{StaticResource ToleranceRangeTypeChecker}">
                                        <Binding ElementName="UserControl" Path="ToleranceZoneLowerBound" />
                                        <Binding ElementName="UserControl" Path="ToleranceZoneUpperBound" />
                                    </MultiBinding>
                                </DataTrigger.Binding>
                                <Setter Property="Data" Value="F1M205.917,103.0088C189.333,93.8108,170.128,88.9998,150,88.9998C129.873,88.9998,110.584,93.8108,94.167,102.8408L116.1,144.2508L150,208.7178L183.9,144.2508z" />
                                <Setter Property="Width" Value="111.75" />
                                <Setter Property="Height" Value="118.718" />
                                <!--<Setter Property="Canvas.SetLeft"-->
                            </DataTrigger>
                            <DataTrigger Value="0">
                                <DataTrigger.Binding>
                                    <MultiBinding Converter="{StaticResource ToleranceRangeTypeChecker}">
                                        <Binding ElementName="UserControl" Path="ToleranceZoneLowerBound" />
                                        <Binding ElementName="UserControl" Path="ToleranceZoneUpperBound" />
                                    </MultiBinding>
                                </DataTrigger.Binding>
                                <Setter Property="Data" Value="F1M150,88.9998C129.873,88.9998,110.584,93.8108,94.167,102.8408L150,208.7178C150,208.7178,150,114.157407529625,150,88.9998z" />
                                <Setter Property="Width" Value="55.917" />
                                <Setter Property="Height" Value="118.718" />
                                <!--<Setter Property="Canvas.SetLeft"-->
                            </DataTrigger>
                            <DataTrigger Value="1">
                                <DataTrigger.Binding>
                                    <MultiBinding Converter="{StaticResource ToleranceRangeTypeChecker}">
                                        <Binding ElementName="UserControl" Path="ToleranceZoneLowerBound" />
                                        <Binding ElementName="UserControl" Path="ToleranceZoneUpperBound" />
                                    </MultiBinding>
                                </DataTrigger.Binding>
                                <Setter Property="Data" Value="F1M205.917,103.0088C189.333,93.8108 170.128,88.9998 150,88.9998 150,113.365662567029 150,208.7178 150,208.7178L183.9,144.2508z" />
                                <Setter Property="Width" Value="111.75" />
                                <Setter Property="Height" Value="118.718" />
                                <!--<Setter Property="Canvas.SetLeft"-->
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>

我的另一个想法是实际上有3个不同的路径并使用setter来改变每个路径的可见性,但我认为有一条路径并改变它的属性会更合乎逻辑。我也更喜欢一条路径,因为我的目标是最终在路径之间制作动画,而不是让它们立即改变。

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以通过在属性更改回调中转换sender参数来获取实例。