我使用控件模板重新设置了文本框的样式。样式效果很好,但在文本框中更改后,我现在无法以编程方式从文本框中获取文本值。
以下是我使用该样式的方式:
<TextBox
x:Name="KernTextBox"
Style="{StaticResource MediumTextBoxStyle}"
TextWrapping="Wrap"
MinLines="1"
MaxLines="5"
VerticalScrollBarVisibility="Auto"
TextChanged="TextChanged"
/>
这是行不通的。
get { return KernTextBox.Text; }
这是样式:
<Style x:Key="MediumTextBoxStyle" TargetType="TextBox">
<Setter Property="FontSize" Value="18" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TextBox">
<Grid>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal"/>
<VisualState x:Name="MouseOver" />
<VisualState x:Name="ReadOnly">
<Storyboard>
<ObjectAnimationUsingKeyFrames
Storyboard.TargetName="ButtonRectangle"
Storyboard.TargetProperty="Fill">
<DiscreteObjectKeyFrame
KeyTime="0"
Value="{StaticResource ForegroundBrush}" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames
Storyboard.TargetName="ButtonText"
Storyboard.TargetProperty="Foreground">
<DiscreteObjectKeyFrame
KeyTime="0"
Value="{StaticResource BackgroundBrush}" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames
Storyboard.TargetName="ButtonText"
Storyboard.TargetProperty="Background">
<DiscreteObjectKeyFrame
KeyTime="0"
Value="{StaticResource ForegroundBrush}" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames
Storyboard.TargetName="ButtonText"
Storyboard.TargetProperty="BorderBrush">
<DiscreteObjectKeyFrame
KeyTime="0"
Value="{StaticResource ForegroundBrush}" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Disabled">
<Storyboard>
<ObjectAnimationUsingKeyFrames
Storyboard.TargetName="ButtonRectangle"
Storyboard.TargetProperty="Fill">
<DiscreteObjectKeyFrame
KeyTime="0"
Value="{StaticResource ForegroundBrush}" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames
Storyboard.TargetName="ButtonText"
Storyboard.TargetProperty="Foreground">
<DiscreteObjectKeyFrame
KeyTime="0"
Value="{StaticResource BackgroundBrush}" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames
Storyboard.TargetName="ButtonText"
Storyboard.TargetProperty="Background">
<DiscreteObjectKeyFrame
KeyTime="0"
Value="{StaticResource ForegroundBrush}" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames
Storyboard.TargetName="ButtonText"
Storyboard.TargetProperty="BorderBrush">
<DiscreteObjectKeyFrame
KeyTime="0"
Value="{StaticResource ForegroundBrush}" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="CheckStates">
<VisualState x:Name="Checked" />
<VisualState x:Name="Unchecked"/>
</VisualStateGroup>
<VisualStateGroup x:Name="FocusStates">
<VisualState x:Name="Focused" />
<VisualState x:Name="Unfocused"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Rectangle
x:Name="ButtonRectangle"
Stroke="Transparent"
UseLayoutRounding="False"
Fill="{StaticResource BackgroundBrush}">
</Rectangle>
<TextBox
x:Name="ButtonText"
Text="{Binding Path=Text, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"
FontSize="{TemplateBinding FontSize}"
HorizontalAlignment="Stretch"
VerticalAlignment="Center"
Margin="2 0"
TextWrapping="{TemplateBinding TextWrapping}"
MinLines="{TemplateBinding MinLines}"
MaxLines="{TemplateBinding MaxLines}"
VerticalScrollBarVisibility="{TemplateBinding VerticalScrollBarVisibility}"
Padding="{TemplateBinding Padding}"
Foreground="{StaticResource ForegroundBrush}"
Background="{StaticResource BackgroundBrush}"
>
</TextBox>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
编辑:
最终工作方式:
<Style
x:Key="TextBoxStyle"
TargetType="{x:Type TextBox}">
<Setter
Property="Foreground"
Value="{StaticResource ForegroundBrush}" />
<Setter
Property="FontSize"
Value="18" />
<Setter
Property="CaretBrush"
Value="{StaticResource ForegroundBrush}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBox}">
<Border
Name="Border"
Background="{StaticResource BackgroundBrush}"
BorderBrush="{StaticResource ForegroundBrush}"
BorderThickness="1" >
<ScrollViewer Margin="0" x:Name="PART_ContentHost"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="Border" Property="Background" Value="{StaticResource ForegroundBrush}"/>
<Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource BackgroundBrush}"/>
<Setter Property="Foreground" Value="{StaticResource BackgroundBrush}"/>
</Trigger>
<Trigger Property="IsReadOnly" Value="True">
<Setter TargetName="Border" Property="Background" Value="{StaticResource ForegroundBrush}"/>
<Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource BackgroundBrush}"/>
<Setter Property="Foreground" Value="{StaticResource BackgroundBrush}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>