I style my TextBox
using a ResourceDictionary
(and have registered it in App.xaml
):
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style TargetType="{x:Type TextBox}"
x:Key="TextBoxTheme">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBox}">
<Border CornerRadius="12"
Background="#2E3135"
Width="{TemplateBinding Width}"
Height="{TemplateBinding Height}">
<Grid>
<TextBox BorderThickness="0"
Background="Transparent"
VerticalContentAlignment="Center"
Padding="20,0,20,0"
Foreground="#B8BDC1" />
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
My App.xaml
:
<Application x:Class="Paraject.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Paraject"
StartupUri="/MVVM/Views/Windows/LoginWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/UiDesign/Theme/TextBoxTheme.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
When I apply the style to my TextBox
, my binding doesn't work.
My TextBox
:
<TextBox x:Name="UsernameTextbox"
Grid.Row="2"
Width="303"
Height="38"
Margin="0,0,0,30"
FontSize="15"
Text="{Binding Path=CurrentUserAccount.Username}"
Style="{StaticResource TextBoxTheme}" />
(the MessageBox
es on the images below are shown after the button click)
What it looks like when I APPLY the Style
:
What it looks like when I REMOVE the Style
:
Even if I add Text="{TemplateBinding Text}"
to my ResourceDictionary
, the binding will still not work (if the Style
is applied to my TextBox
)
I now fixed it by: Adding in my TextBox
control's Text
property that is in the ResourceDictionary
:
<TextBox Text="{Binding Path=Text,
RelativeSource={RelativeSource TemplatedParent},
Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}"
BorderThickness="0"
Background="Transparent"
VerticalContentAlignment="Center"
Padding="20,0,20,0"
Foreground="#B8BDC1"
CaretBrush="#B8BDC1" />
You can use style as separate file like this:
App.xaml:
<Application x:Class="SomeClassHere"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Theme/TextBoxes.xaml" />
<ResourceDictionary Source="Theme/AnotherFile.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
Theme/TextBoxes.xaml:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style TargetType="{x:Type TextBox}"
x:Key="TextBoxTheme">
...
</Style>
</ResourceDictionary>
Or use style inside
<Application x:Class="SomeClassHere"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Application.Resources>
<ResourceDictionary>
<Style TargetType="{x:Type TextBox}"
x:Key="TextBoxTheme">
...
</Style>
</ResourceDictionary>
</Application.Resources>
</Application>
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.