【问题标题】:Creating Layered Custom Control Templates (WPF 4 / .net 4.0 / C#)创建分层自定义控件模板 (WPF 4 / .net 4.0 / C#)
【发布时间】:2012-05-15 15:55:51
【问题描述】:

我需要一些帮助来尝试重新创建以下样式:

红海可以忽略,因为它只是文本框所在的背景。

要创建文本框,我使用以下 xaml:

            <TextBox Name="tbSorageName"
                     Grid.Column="1"
                     Width="250"
                     Height="30"
                     Margin="0"
                     HorizontalAlignment="Left"
                     VerticalAlignment="Top"
                     IsReadOnly="True"
                     Style="{StaticResource MainTextBoxStyle}"
                     Text="{Binding SelectedStorage.Name,
                                    Mode=OneWay,
                                    UpdateSourceTrigger=PropertyChanged}" />

为了给它设置样式,我使用了以下样式:

<Style x:Key="MainTextBoxStyle" TargetType="TextBox">
    <Setter Property="FontSize" Value="16" />
    <Setter Property="Foreground" Value="Snow" />
    <Setter Property="FontFamily" Value="Calibri" />
    <Setter Property="TextAlignment" Value="Center" />
    <Setter Property="Background" Value="{DynamicResource MainTextBox_BGBrush}" />
    <Setter Property="BorderBrush" Value="{DynamicResource MainTextBox_BorderBrush}" />
    <Setter Property="BorderThickness" Value="2" />
    <Setter Property="TextAlignment" Value="Left" />
</Style>

我使用的笔刷是:

<SolidColorBrush x:Key="MainTextBox_BGBrush" Color="#3A3A3A" />
<SolidColorBrush x:Key="MainTextBox_BorderBrush" Color="#656565" />

这创建了我在应用程序中使用的基本文本框,但我想通过在文本框右侧浮动一些描述文本框内容的有意义的文本来进一步改进我的设计 - 所以它应该锚定到右手边。

【问题讨论】:

  • 伪造一个你希望它看起来像什么的例子可能会有所帮助。
  • 在我的问题顶部应该有一个我在paint.net 中制作的小图像/图片来说明我正在尝试做的事情。你看不出来吗?
  • 对不起,我以为你已经看到了什么,你想进一步改进它。

标签: c# wpf .net-4.0 styling controltemplate


【解决方案1】:

您可以通过 2 种方法轻松做到这一点。

1.创建一个由文本框和文本块组成的用户控件。 UserControl 的 Xaml 类似于以下内容

<Grid Width="{Binding Path=Width, ElementName=tbSorageName}" Height="{Binding Path=Height, ElementName=tbSorageName}">
   <TextBox Name="tbSorageName"
                 Grid.Column="1"
                 Width="250"
                 Height="30"
                 Margin="0"
                 HorizontalAlignment="Left"
                 VerticalAlignment="Top"
                 IsReadOnly="True"
                 Style="{StaticResource MainTextBoxStyle}"
                 Text="hello" />
    <TextBlock HorizontalAlignment="Right" Margin="5" Foreground="Red" FontStyle="Italic">Name</TextBlock>
</Grid>

2.在文本框上覆盖Adorner,并通过 OnRender Override 自己在文本框上绘制描述。

我会使用 Usercontrol 方法,因为它更干净且更易于维护。

【讨论】:

  • 自定义控件模板怎么样?
  • 这也行得通,虽然对于这么简单的事情来说似乎有点过于沉重。
  • 好的——我唯一剩下的问题是如何将信息输入到由自定义控件包装的各个控件中?即在 .xaml 中实例化自定义控件时如何设置第二个文本框的文本?
  • 哦,这很简单,在您的自定义/用户控件中为标签创建一个依赖属性。绑定到 Xaml 中的此属性作为标签文本。然后,当您在用户控件上设置/绑定依赖属性时,您的标签将更改。
  • TY 这么多你回答我的问题比我预期的要多。当我开始研究这个时。
猜你喜欢
  • 1970-01-01
  • 2015-09-07
  • 2011-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多