WPF。将ImageBrush Viewbox属性绑定到对象时的FormatException

时间:2015-02-02 11:13:21

标签: c# wpf binding viewbox

我正在尝试将ImageBrush的“Viewbox”属性绑定到代码隐藏的类属性。

我有两个图像,我的想法是,当我将鼠标移到顶部图像上时,底部图像显示相对于鼠标位置的视图框中顶部图像的一部分。 该代码仅用于测试,而我正在学习WPF,所以我知道它可能会好得多,抱歉。

XAML代码:

<Window x:Class="WpfApplication2.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    DataContext="{Binding RelativeSource={RelativeSource Self}}"
    Title="MainWindow" Height="950" Width="525">

...

<Rectangle Grid.Row="0" MouseMove="Rectangle_MouseMove">
        <Rectangle.Fill>
            <ImageBrush Stretch="UniformToFill"  ImageSource="descarga.png"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Grid.Row="1">
        <Rectangle.Fill>
            <ImageBrush Stretch="UniformToFill"  ImageSource="descarga.png" ViewboxUnits="Absolute" Viewbox="{Binding Source=ViewboxRect}"/>
        </Rectangle.Fill>
    </Rectangle>

C#代码背后:

private Rect _rect;

    public MainWindow()
    {
        InitializeComponent();
    }

    public Rect ViewboxRect
    {
        get
        {                
            return _rect;
        }
        set
        {
            _rect = value;
        }
    }
private void Rectangle_MouseMove(object sender, MouseEventArgs e)
    {
        Point p = e.GetPosition(this);
        _rect.X = p.X;
        _rect.Y = p.Y;
        _rect.Width = p.X + 10;
        _rect.Height = p.Y + 10;
    }

上面的代码抛出以下异常: System.Windows.Data错误:6:'TargetDefaultValueConverter'转换器无法转换值'ViewboxRect'(类型'String');如果可用,将使用后备值。 BindingExpression:路径=; DataItem ='String'(HashCode = 1651705780); target元素是'ImageBrush'(HashCode = 47805141); target属性是'Viewbox'(类型'Rect')FormatException:'System.FormatException:输入字符串的格式不正确。

我试图将“_rect”更改为String,但会抛出相同的错误。 为什么错误说“转换器无法转换值'ViewboxRect'(类型'String')”,而该属性是一个Rect而不是String?

谢谢。

1 个答案:

答案 0 :(得分:0)

在我看来,你的绑定似乎不对。你绑定到MainWindow的属性所以它应该是:

<Rectangle Grid.Row="1">
    <Rectangle.Fill>
        <ImageBrush Stretch="UniformToFill"  ImageSource="descarga.png" ViewboxUnits="Absolute"
                    Viewbox="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type local:MainWindow}}, Path=ViewboxRect}"/>
    </Rectangle.Fill>
</Rectangle>

此外,您应该考虑到Rect没有实现INotifyPropertyChanged,因此您的用户界面将不会了解您在Rectangle_MouseMove方法中所做的更改。