WPFでイメージのスケールを動的に更新する際に問題が発生しています。私が望む正確な振る舞いは、ボタンをクリックすると、私はUserControl内の画像を拡大(または縮小)したいと思います。WPFのImageで実行時にスケールを更新するにはどうすればよいですか?
私のXAML:
<UserControl x:Class="Company.Scaling.ScaleControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<Image x:Name="imageContainer" Stretch="None" Focusable="False" HorizontalAlignment="Left" VerticalAlignment="Top">
<Image.LayoutTransform>
<ScaleTransform x:Name="scaleTransform">
</ScaleTransform>
</Image.LayoutTransform>
</Image>
</Grid>
私は現在、このような特性scaleXプロパティとscaleYを更新しています:
this.scaleTransform.ScaleX = this.ZoomScale;
this.scaleTransform.ScaleY = this.ZoomScale;
それは私がのコンストラクタでこれらを更新していたときに動作します私のXAMLはこうです:
public ScaleControl()
{
this.InitializeComponent();
this.ZoomScale = 1.5f;
}
しかし、これらのプロパティをランタイムで更新しているとき(ボタンをクリックした後)、それは機能しません。
何か不足していますか?
ありがとうございました!
編集:
クレメンスが言ったことの後、私はいくつかを追加しました。 XAMLで
バインディング:
<Image.LayoutTransform>
<ScaleTransform
ScaleX="{Binding ZoomScale, RelativeSource={RelativeSource AncestorType=UserControl}}"
ScaleY="{Binding ZoomScale, RelativeSource={RelativeSource AncestorType=UserControl}}" />
</Image.LayoutTransform>
依存関係プロパティ:
public static readonly DependencyProperty ZoomScaleProperty = DependencyProperty.Register("ZoomScale", typeof(double), typeof(ScaleControl));
とプロパティ:
public double ZoomScale
{
get { return (double)this.GetValue(ZoomScaleProperty); }
set { this.SetValue(ZoomScaleProperty, value); }
}
私はWPFにかなり新しいですので、多分私が行方不明です私は何かを理解することはできません。
あなたは 'ZoomScale'を変えていますか? –
はい、私はしています:this.ZoomScale = 1.6と何も起こらない – Seb
私は、ZoomScaleのDependencyPropertyを作成してそれを設定するClemensの答えを使用することをお勧めします。コンストラクタ中にZoomScaleを一度設定すると、ランタイムを通じて値が更新されません。 –