WPFカスタムコントロールテンプレート-相対フォントサイズ
-
10-07-2019 - |
質問
カスタムWPFコントロールを作成していますが、ここでは簡単にするために、「タイトル」の付いた垂直スタックパネルがあるとします。 TextBlock、続いてContentPresenter。 「タイトル」のフォントサイズが必要です。コンテンツで使用されるサイズよりも5ポイント大きく、ユーザーがこのコントロールを配置するコンテナに継承されます。
" TitleFontSize"などのプロパティを公開せずに、相対値を使用してヘッダー要素のコントロールテンプレートでフォントサイズを指定するにはどうすればよいですか。ユーザーに? " add 5"を行います。
結果が混在するヘッダーテキストブロックでScaleTransformを使用しようとしました(テキストブロックは正常に拡大縮小されましたが、方向が変更されました-テキストを右揃えにし、拡大縮小時に「コントロール外」の領域に移動しました)。また、ここでスケール変換が適切かどうかもわかりません。
解決 2
次のようにIValueConverterで実行しました:
IValueConverterから派生するクラスFontSizeConverterを作成しました。 Convertメソッドは値に10を加算し、ConvertBackメソッドは10を減算します。
public class FontSizeConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return (double)value + 12.0;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return (double)value - 12.0;
}
#endregion
}
次に、コントロールのXAMLテンプレートでこのクラスのインスタンスを宣言しました:
<Style.Resources>
<local:FontSizeConverter x:Key="fontSizeConverter"/>
</Style.Resources>
そしてFinnaly、FontSizeバインディングは、継承されたFontSizeプロパティに適用されるこのコンバーターを使用します。
<TextBlock FontSize="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=FontSize, Converter={StaticResource fontSizeConverter}}"
Grid.Row="0" Text="{Binding RelativeSource={RelativeSource TemplatedParent},
Path=Date.Day}" HorizontalAlignment="Right" VerticalAlignment="Top" Padding="2" Margin="2" >
</TextBlock>
これは動作します。しかし、これが正解かどうかはまだわかりません。より良い方法があるかどうか、またはこれが適切かどうかを教えてください。
他のヒント
より一般的な方法
値コンバーター
public class MathConverter : IValueConverter
{
public object Convert( object value, Type targetType, object parameter, CultureInfo culture )
{
return (double)value + double.Parse( parameter.ToString() );
}
public object ConvertBack( object value, Type targetType, object parameter, CultureInfo culture )
{
return null;
}
}
コンバータリソース
<my:MathConverter x:Key="MathConverter" />
XAML
<TextBlock FontSize="{Binding
RelativeSource={RelativeSource AncestorType={x:Type Window}},
Path=FontSize,
Converter={StaticResource MathConverter},
ConverterParameter=2}" />