У меня есть TextBox, привязанный к десятичному значению, которое я хочу отформатировать, чтобы десятичные значения не отображались, если они равны нулю. В то же время я хочу изменить цвет фона на цвет, если значение свойства равно нулю, а другое логическое свойство истинно.
Мне удалось добиться того и другого, но не вместе. Если я удалю StringFormat
из привязки текста под фоном, он будет работать отлично, но значение, например, 10 отображается как 10,00, что мне не нужно. Для StringFormat
Фон не установлен, а TextBox
пуст, когда 0, и подавляет десятичные дроби, если они равны нулю, как требуется (пустая строка для нуля допустима). Поэтому я предполагаю, что это связано с пустой строкой. Я попытался проверить пустую строку с Path=Text.IsEmpty
и value="True"
, как было предложено в другом сообщении, но это дает ошибку времени разработки, что свойство IsEmpty
не найдено в типе String.
Это то, что У меня пока есть:
<TextBox x:Name="FactorValueTextBox" Text="{Binding Value, StringFormat={}{0:# ###.##}}" IsReadOnly="{Binding CommodityGradingFactor.Total}" GotKeyboardFocus="GradeFactorGotKeyboardFocus">
<TextBox.Style>
<Style TargetType="TextBox">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Text}" Value="0"/>
<Condition Binding="{Binding CommodityGradingFactor.Manditory}" Value="True"/>
</MultiDataTrigger.Conditions>
<Setter Property="Background" Value="LightPink"/>
</MultiDataTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="True"/>
<Condition Property="IsReadOnly" Value="False"/>
</MultiTrigger.Conditions>
<Setter Property="FontSize" Value="15"/>
<Setter Property="FontWeight" Value="Bold"/>
</MultiTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
Для полноты, функция GotKeyboardFocus()
просто выбирает текущее значение, когда пользователь переходит в TextBox
:
private void GradeFactorGotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
if (e.KeyboardDevice.IsKeyDown(Key.Tab))
((TextBox)sender).SelectAll();
}