我正在尝试将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?
谢谢。
答案 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
方法中所做的更改。