3

現在、コントロールの読み取り専用状態に応じてコントロールの外観を変更するコントロールのスタイルを作成しようとしています。

トリガーは正常に動作していますが、他のプロパティの値に応じていくつかのプロパティを変更したいと考えています。

例として、TextBox コントロールを取り上げます。定義したベース スタイル トリガーは次のとおりです。

<TextBox.Style>
    <Style TargetType="TextBox">
        <Style.Triggers>
            <Trigger Property="IsReadOnly" Value="true">
                <Setter Property="BorderThickness" Value="0,0,0,0" />
                <Setter Property="Background" Value="Transparent" />
                <Setter Property="Padding" Value="3,3,3,3" />
            </Trigger>
        </Style.Triggers>
    </Style>
</TextBox.Style>

スタイルは正常に機能し、読み取り専用モードの場合、TextBox は TextBlock に近いスタイルでレンダリングされます。しかし、とPaddingの初期値に応じてプロパティの値を定義したいと思います。PaddingBorderThickness

どうすればこのスタイルを実現できますか?

4

1 に答える 1

1

できません - aSetterの値は定数でなければなりません。

TextBoxのテンプレートが読み取り専用の場合は、 を使用しTemplateBindingて の割り当てられた値にアクセスできるように、 のテンプレートを変更することをお勧めしますPadding

    <Style.Triggers>
        <Trigger Property="IsReadOnly" Value="true">
          <Setter Property="Template">
              <Setter.Value>
                <ControlTemplate TargetType="{x:Type TextBoxBase}">
                <TextBlock  Padding="{Binding Padding, RelativeSource={RelativeSource TemplatedParent}}" Text="{Binding Text, RelativeSource={RelativeSource TemplatedParent}}"/>
                </ControlTemplate>
              </Setter.Value>
          </Setter>
        </Trigger>
    </Style.Triggers>

または、境界線の色を透明に設定して、同じスペースを占めるが見えないようにすることができるかどうかを確認してください。

于 2013-04-11T12:27:01.413 に答える