1

WPFに欠けている基本的な知識だと思う質問があります。

テキストボックスの幅を最小限に抑えて、デフォルトの幅(generix.XML)をテキストボックスに設定しました

<Style TargetType="{x:Type TextBox}">
    <Setter Property="SnapsToDevicePixels" Value="True"/>
    <Setter Property="OverridesDefaultStyle" Value="True"/>
    <Setter Property="Foreground" Value="Black"/>
    <Setter Property="KeyboardNavigation.TabNavigation" Value="None"/>
    <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
    <Setter Property="MinWidth" Value="50"/>
</Style>

テキストボックスを保持する2つの異なるコントロールがあります。両方のテキスト ボックスの幅は同じです。テキスト ボックスの幅を宣言するコントロールの 1 つにいくつかのプロパティを追加し、その幅宣言をオーバーライドして、テキスト ボックスがこのプロパティを「見つける」ようにします。

ここに私の要件を説明するいくつかの図があります:

コントロール

アップデート:

もう1つ重要なことを説明していないことに気づきました。テキストボックスを使用する DataTemplate があります。上で書いたように、同じ DataType (MyData) を持つ 2 つのコントロールがあり、MyData を表示する DateTemplate も作成しました。各コントロールが (データテンプルからの) テキストボックスを異なる幅で表示することを望みます。

更新 2: ここにいくつかのコードがあります

1-テキストボックスを使用しているデータへのdataTemplate

<DataTemplate DataType="{x:Type ml:MyData}">
    <Border  BorderBrush="Transparent" ClipToBounds="True"  Style="{StaticResource errorBorder}">
        <TextBox Text="{Binding MyText}"/>
    </Border>
</DataTemplate>

2-テキストボックスを使用するデータテンプレートを使用した方法。

<ContentPresenter Grid.Column="1" Margin="10,1,10,1" HorizontalAlignment="Left" Content="{Binding}" />

この contentPresentor は、2 つの異なるコントロールに表示されています。前に書いたように、各コントロールがテキストボックスを異なる幅で表示することを望みます

基本的なknloage(添付されたプロパティ?ロジック/ビジュアルツリー?)が欠けているようです。

ありがとう、レオン

4

1 に答える 1

0

良い質問です。DataTemplate の主なアイデアは、一部のデータに対して特定のグラフィック表現を使用することです。詳細については、MSDNを参照してください。
TextBox をカスタマイズし、異なる UserControls 内に異なるプロパティを持たせたい場合は、ControlTemplateを使用することをお勧めします。問題は、特定のコントロール (この場合は境界線のある TextBox) のプロパティを制御する場合は、ControlTemplate を使用する必要があるということです。XAML は次のようになります。

<ControlTemplate TargetType="{x:Type TextBox}">
        <--! define the ControlTemplate here with some Width property-->
<ControlTemplate>

そして、それを使用するコントロールには TextBox があります (定義したように、Border を使用):

<TextBox Grid.Column="1" Margin="10,1,10,1" HorizontalAlignment="Left" Content="{Binding}" Width="50"/>
于 2012-05-09T11:11:41.273 に答える