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>

我有两个包含文本框的不同控件。两个文本框具有相同的宽度。我向其中一个控件添加一些属性,该控件将声明文本框的宽度,并将覆盖其宽度声明,以使文本框“找到”该属性。

这是一些描述我的要求的图:

控制

更新:

我只是发现我没有再描述一件进口的事情。我有一些使用文本框的 DataTemplate。正如我在上面所写的,我有两个具有相同 DataType (MyData) 的控件,我还创建了 DateTemplate 来显示 MyData。我希望每个控件都显示不同宽度的文本框(来自数据模板)。

更新 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 显示在两个不同的控件中。正如我之前写的,我希望每个控件都以不同的宽度显示文本框

看起来我错过了一些基本知识(附加属性?逻辑/视觉树?)。

谢谢,莱昂

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 (正如您定义的那样,带有边框):

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