所以这是我的TextBox
风格:
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource MetroTextBox}">
<Setter Property="Foreground" Value="Gainsboro"/>
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Controls:TextBoxHelper.ClearTextButton" Value="True"/>
<Setter Property="Padding" Value="0,1,0,0" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Foreground" Value="White"/>
<Setter Property="Controls:TextBoxHelper.ClearTextButton" Value="True"/>
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsEnabled" Value="False" />
<Condition Property="IsMouseOver" Value="False"/>
</MultiTrigger.Conditions>
<MultiTrigger.Setters>
<Setter Property="Background" Value="#FF0052B2"/>
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="Foreground" Value="Gainsboro"/>
</MultiTrigger.Setters>
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsEnabled" Value="True" />
<Condition Property="IsMouseOver" Value="False"/>
</MultiTrigger.Conditions>
<MultiTrigger.Setters>
<Setter Property="Foreground" Value="Gainsboro"/>
<Setter Property="Background" Value="#FF103766"/>
<Setter Property="BorderBrush" Value="Transparent"/>
</MultiTrigger.Setters>
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsEnabled" Value="True" />
<Condition Property="IsMouseOver" Value="True"/>
</MultiTrigger.Conditions>
<MultiTrigger.Setters>
<Setter Property="Foreground" Value="White"/>
<Setter Property="Background" Value="#FF7AA0CD"/>
<Setter Property="BorderBrush" Value="White"/>
</MultiTrigger.Setters>
</MultiTrigger>
</Style.Triggers>
</Style>
我的控制器:
<TextBox
Name="Filter"
Width="398"
Height="25"
TextChanged="tbSnifferFilter_TextChanged"
Margin="23,0,0,0"/>
在我的应用程序中,用户需要输入我的TextBox
过滤器(简单字符串),并通过以下方法检查此过滤器是否有效并更改我的TextBox
{{1 }}颜色为Backgroud
或Green
:
Red
所以在添加过滤器(有效ot无效)后,用户点击private void tbFilter_TextChanged(object sender, TextChangedEventArgs e)
{
tbFilter.TextChanged -= tbFilter_TextChanged;
if (tbFilter.Text == "") // In case user click on clear button - return back to default backgroud color.
{
tbFilter.Background = (Brush)new BrushConverter().ConvertFromString("#FF103766");
tbFilter.TextChanged += tbFilter_TextChanged;
return;
}
if (!IsSyntaxCurrect(tbFilter.Text))
tbFilter.Background = Brushes.Salmon;
else
tbFilter.Background = Brushes.MediumSeaGreen;
tbFilter.TextChanged += tbFilter_TextChanged;
}
private bool IsSyntaxCurrect(string filter)
{
try
{
// Do my stuff...
return true;
}
catch (Exception)
{
return false;
}
}
清除按钮清除TextBox
TextBox
颜色返回默认颜色但{{1不工作,什么都不做。
答案 0 :(得分:1)
这是因为您在事件处理程序中设置的本地Background
值优先于Style
设置的值。有关依赖项属性值优先级的更多信息,请参阅MSDN:
在清除Background
时,您可以使用Brush
方法清除依赖项属性的值,而不是将TextBox
属性设置为新的ClearValue
值:
private void tbFilter_TextChanged(object sender, TextChangedEventArgs e)
{
tbFilter.TextChanged -= tbFilter_TextChanged;
if (tbFilter.Text == "") // In case user click on clear button - return back to default backgroud color.
{
tbFilter.ClearValue(TextBox.BackgroundProperty); //<--
tbFilter.TextChanged += tbFilter_TextChanged;
return;
}
if (!IsSyntaxCurrect(tbFilter.Text))
tbFilter.Background = Brushes.Salmon;
else
tbFilter.Background = Brushes.MediumSeaGreen;
tbFilter.TextChanged += tbFilter_TextChanged;
}