将XAML图像宽度和高度绑定到我的类属性

时间:2017-01-12 11:48:29

标签: c# wpf xaml binding

我有一个自定义的WPF控件,其上应用了XAML控件模板。

XAML控件模板的图像宽度和高度我希望绑定到控件类中的属性。

<Image Height="24" Width="24"  Source="{Binding Path=IconSource}" Margin="2" />

我想将Height和Width绑定到我的类的属性,类似于我如何绑定我喜欢的按钮的onclick事件:

MyClass代码

#region Constructor        
public MyClass()
{ 
    CommandBindings.Add(new CommandBinding(ButtonClickCommand, ButtonClickCommand_Executed));
}
#endregion

#region Public
public static readonly RoutedUICommand ButtonClickCommand= new RoutedUICommand();
#endregion

private void ChangeViewCommand_Executed(object sender, ExecutedRoutedEventArgs e)
{
    //do something
}

XAML

<Button Name="MyButton" Command="{x:Static local:MyClass.ButtonClickCommand}">
    <Image Source="{DynamicResource MyImage}"  Width="20" Height="20"/>
</Button>

如何为图像高度和宽度做类似的事情?我将拥有一个我想修改的属性,并将其反映在XAML中。

2 个答案:

答案 0 :(得分:1)

如果Image元素是控件的子元素,则可以使用RelativeSource绑定到父控件的属性:

<Image Source="{DynamicResource MyImage}"  Width="{Binding YourWidth, RelativeSource={RelativeSource AncestorType=local:MyClass}}" 
           Height="{Binding YourHeight, RelativeSource={RelativeSource AncestorType=local:MyClass}}" />

当然,您还必须将YourWidthYourHeight属性或您选择的任何属性添加到控件类中。属性的类型应为double

public static readonly DependencyProperty YourWidthProperty =
     DependencyProperty.Register("YourWidth", typeof(double),
     typeof(MyClass), new FrameworkPropertyMetadata(0.0));

public double YourWidth
{
    get { return (double)GetValue(YourWidthProperty); }
    set { SetValue(YourWidthProperty, value); }
}

答案 1 :(得分:1)

嗯,您需要对XAML进行的唯一更改是:

<Image Height="{Binding ImageHeight}" Width="{Binding ImageWidth}"  Source="{Binding Path=IconSource}" Margin="2" />

然后你要做的就是在MyClass上创建两个属性:

public double ImageWidth { get; set; }
public double ImageWidth { get; set; }

不要忘记set your window DataContextMyClassimplement INotifyPropertyChanged界面!