簡體   English   中英

創建分層的自定義控件模板(WPF 4 / .net 4.0 / C#)

[英]Creating Layered Custom Control Templates (WPF 4 / .net 4.0 / C#)

在嘗試重新創建以下樣式時,我需要一些幫助:

我的自定義樣式

可以忽略紅色海洋,因為它只是文本框所在的背景。

要創建文本框,我使用以下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" />

這樣就創建了我在應用程序中使用的基本文本框,但是我想通過在文本框的右側浮動一些描述文本框內容的有意義的文本來進一步設計,所以應該將其錨定在右側側。

您可以通過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方法,因為它更干凈且易於維護。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM