无法解释的WPF错误绑定到静态字段

时间:2015-04-24 17:46:30

标签: c# wpf xaml

我在一个中央库中有一个类,它有一个我们用来控制缩放的滑块。我们有一个静态字段,用于设置我们支持的系统范围最大缩放级别。它很重要,因为我们使用该值来强制来自多个缩放路径的范围,我们必须支持具有相同概念的传统WinForms应用程序。

public class ZoomableClass
{
    // really integers, but has to be a double to support binding to
    // WPF Slider.Maximum
    public const double MaxZoomLevel = 19;
}

在XAML中,我天真地认为我应该能够做到以下几点:

<Slider Maximum="{x:Static core:ZoomableClass.MaxZoomLevel}" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type core:ZoomView}}, Path=ViewModel.(core:ZoomViewModel.ZoomLevel)}"/>

除了编辑抱怨之外,当我运行应用程序时,调试日志被卡在Slider.Value属性中记录绑定失败的循环中。当我将{x:Static}值更改回常量时,一切都恢复正常。

要解决这个问题并仍然使用常量,我在控制资源中声明了它:

<mvvm:View.Resources>
    <ResourceDictionary>
        <x:Static Member=core:ZoomableClass.MaxZoomLevel" x:Key="MaxZoomLevel"/>
    </ResourceDictionary>
</mvvm:View.Resources>

稍后我将slider属性绑定到静态资源:

<Slider Maximum="{StaticResource MaxZoomLevel}" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type core:ZoomView}}, Path=ViewModel.(core:ZoomViewModel.ZoomLevel)}""/>

这在运行时有效,但设计师抱怨告诉我An object of the type "System.Windows.Markup.StaticExtension" cannot be applied to a property that expects the type "System.Double".

希望设计师问题在更新的版本中得到修复(我们在Visual Studio 2010上),但是当我在设计器中打开该文件时,整个Slider都有那个丑陋的红色&#39; x&#39;对于破碎的控制。我打开一个使用该控件的XAML文件,它渲染得很好。

有人可以向我解释为什么我的第一次尝试不起作用,有没有办法在没有设计师向我抱怨的情况下做到这一点?

0 个答案:

没有答案