안녕하세요.
저는 WPF GUI에 표시되는 모든 text에 conveter를 연결하여 값을 변환하고 싶습니다.
이에 저는 아래와 같은 방법을 시도했습니다.
XAML
<StackPanel HorizontalAlignment="Left">
<ComboBox Width="160" ItemsSource="{Binding ComboBoxValue}" SelectedItem="{Binding SelectedItem}" Margin="4"/>
<Button Content="Button" Click="Button_Click" Margin="4"/>
<Label Content="{Binding ResultValue}" Margin="4"/>
<TextBlock Text="{Binding ResultValue}" Margin="4"/>
<TextBox Text="A" Margin="4"/>
<GroupBox Header="A"/>
<DataGrid ItemsSource="{Binding MyListData}">
<DataGrid.Columns>
<DataGridTextColumn Header="Col1" Binding="{Binding Item1}"/>
<DataGridTextColumn Header="Col2" Binding="{Binding Item2}"/>
<DataGridTextColumn Header="Col3" Binding="{Binding Item3}"/>
</DataGrid.Columns>
</DataGrid>
</StackPanel>
ControlDictionary
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:conv="clr-namespace:TextConverterTest"
mc:Ignorable="d">
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Background" Value="Yellow"/>
<Setter Property="Text">
<Setter.Value>
<Binding RelativeSource="{RelativeSource Self}">
<Binding.Converter>
<conv:ConvertTextInTextBlock/>
</Binding.Converter>
</Binding>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
Converter
public class ConvertTextInTextBlock : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var tb = (TextBlock)value;
if (tb.Text == "A")
{
tb.Text = "A11";
}
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return value;
}
}
Result
문제점은 다음과 같습니다.
TextBlock이 모든 Control의 Text를 Base로 하는 Control이 아닌 것 같습니다. 일부 DataGrid의 값이나 TextBox의 값은 변하지 않았습니다.
이에 저는 GUI의 모든 Text에 converter를 적용할 수 있는지를 알고 싶습니다.
이 문제에 대해 도움을 주실 수 있을까요?
감사합니다.