質問

カスタム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}" />
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top