2017-01-12 7 views
-1

XAMLコントロールテンプレートが適用されたカスタムWPFコントロールがあります。XAMLイメージの幅と高さをクラスプロパティにバインド

XAMLコントロールテンプレートには、コントロールクラスのプロパティにバインドする幅と高さのイメージがあります。

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 
} 

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

は、私はそうのように持っている私は、ボタンのonclickイベントを結合していますどのように似た私のクラスのプロパティに高さと幅をバインドしたいです

XAML

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

画像の高さと幅に似たようなことをするにはどうすればいいですか?私は、変更したいプロパティをXAMLに反映させます。

+0

あなたは既に 'Source'プロパティをバインドしていますので、' Width'と 'Height'で同じことをやり遂げるのを止めますか? – Clemens

+0

IconSourceは、XAMLのその部分を含んでいないItemsControlにバインド/追加されたオブジェクトのプロパティです。 WIdthとHeightをMyCLassのプロパティにバインドし、ItemsCOntrolにオブジェクトを追加しません。 –

+0

次に、 'Command =" {x:Static local:MyClass.ButtonClickCommand} "'と似たようなことをします。 'Width =" {x:静的ローカル:MyClass.ImageWidth} "' MyClassの役割を説明してください。静的な設定パラメータのセットですか? – Clemens

答えて

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

さて、あなたはあなたのXAMLに必要な唯一の変更は、これらのは次のとおりです。

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

次に、あなたがしなければならないすべてはMyClass上の2つのpropertyesを作成することです。

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

はちょうどそれにMyClassからset your window DataContextimplement INotifyPropertyChangedインターフェイスに忘れないでください!

関連する問題