[英]Using custom properties in WPF styles
我有這個文本框:
<TextBox/>
我想在上面加一個水印,說, Enter your message here...
由於不支持現成的功能,因此可以成功完成此操作:
<Style TargetType="TextBox" xmlns:sys="clr-namespace:System;assembly=mscorlib">
<Style.Resources>
<VisualBrush x:Key="CueBannerBrush" AlignmentX="Left" AlignmentY="Center" Stretch="None">
<VisualBrush.Visual>
<Label Content="Enter your message here..." Foreground="LightGray" Padding="10 0 0 0" />
</VisualBrush.Visual>
</VisualBrush>
</Style.Resources>
<Style.Triggers>
<Trigger Property="Text" Value="{x:Static sys:String.Empty}">
<Setter Property="Background" Value="{StaticResource CueBannerBrush}" />
</Trigger>
<Trigger Property="Text" Value="{x:Null}">
<Setter Property="Background" Value="{StaticResource CueBannerBrush}" />
</Trigger>
<Trigger Property="IsKeyboardFocused" Value="True">
<Setter Property="Background" Value="White" />
</Trigger>
</Style.Triggers>
</Style>
但是,是否有一種方法可以為WatermarkText
擴展具有XAML
屬性的TextBox
,如下所示,讓我的樣式選擇它並使用它,或者是否有其他方法(C#等)來實現?
<TextBox WatermarkText="Enter your message here..."/>
最好的方法是使用可以以樣式綁定的附加依賴項屬性。 請記住,綁定附加的依賴項屬性是
Text={Binding (AttachedPropertyName)}
()做個把戲。
看看Mahapps。 這是一個很好的設計框架,並提供了一個TextBoxHelper類來完成所有這些工作。 它是開源的,因此您可以查看如何使用附加屬性實現它。
做我需要的最簡單的方法是將標簽放置在與文本框相同的位置,而不在.xaml
測試可見性:
<TextBox Name="Username" Grid.Row="2" Height="40" FontFamily="Segoe UI" FontSize="20" VerticalContentAlignment="Center" TextChanged="Username_TextChanged"/>
<Label Name="UsernameLabel" Content="Username" Grid.Row="2" FontFamily="Segoe UI" FontSize="20" Foreground="LightGray" Padding="5" IsHitTestVisible="False" />
在.cs
:
private void Hostname_TextChanged(object sender, TextChangedEventArgs e)
{
UpdateLabel(Hostname, HostnameLabel);
}
private void UpdateLabel(TextBox textBox, Label label)
{
label.Visibility = String.IsNullOrWhiteSpace(textBox.Text) ? Visibility.Visible : Visibility.Hidden;
}
這也適用於密封的密碼箱, 因此,如果您嘗試擴展密封的控件,則無論如何都不能繼承它們 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.