フォーカスを受け取ったときにButtonコントロールの余白を減らしたいシナリオがあります。なぜなら、私はそのButtonコントロールのボーダープロパティを増やすことはできませんし、同時に同じサイズ(高さと幅)を維持することもできないからです。そこで、Web上での少しの努力は私にValueConverterを書いてマージンを減らすように案内しました。しかし、私はまだ作業コードを立てることができません。ボタンがフォーカスされているときのボタンのマージンを減らす
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
Thickness newMargin = new Thickness();
Thickness margin = (Thickness)value;
Thickness reduceBy = (Thickness)parameter;
newMargin.Left = margin.Left - reduceBy.Left;
newMargin.Top = margin.Top - reduceBy.Top;
newMargin.Right = margin.Right - reduceBy.Right;
newMargin.Bottom = margin.Bottom - reduceBy.Bottom;
return newMargin;
}
再帰的に呼び出されてMargin.LeftためStackOverflowExceptionが上記のコードの結果:ここで私はコンバータ
<ControlTemplate.Triggers> <!--ControlTemplate for the Button-->
<Trigger Property="IsFocused" Value="True">
<Setter Property="BorderBrush" TargetName="bdrButton" Value="Wheat"/>
<Setter Property="BorderThickness" TargetName="bdrButton" Value="2"/>
<Setter Property="Margin" TargetName="bdrButton" >
<Setter.Value>
<Binding ElementName="bdrButton" Path="Margin" Converter="{StaticResource N_MarginReducer}">
<Binding.ConverterParameter>
<Thickness>1,1,1,1</Thickness>
</Binding.ConverterParameter>
</Binding>
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
XAML
をごちゃ混ぜにしたものです。誰でも私が達成しようとしているシナリオのより良いアイデアや実装があります。
"のLostFocus" とButtonクラスで "のGotFocus" イベントを使用しようとしていない理由は何ですか? IValueConverterより簡単かもしれません。 –
レスリー、返事をありがとうが、このシナリオでどのように使用できるか教えてください。私は、MVVMパターンに従ってファイルの背後にあるコードを使用することを心配していません。 – Jatin
はい、MVVMに従わないでしょう。あなたのXAMLを見た後の1つのこと - bdrButtonマージンのセッターの値がセッター内にないようですね?またはコピー/貼り付けが間違っていた。 –