GUI에 표시되는 모든 text에 converter 연결하기

안녕하세요.
저는 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
image

문제점은 다음과 같습니다.
TextBlock이 모든 Control의 Text를 Base로 하는 Control이 아닌 것 같습니다. 일부 DataGrid의 값이나 TextBox의 값은 변하지 않았습니다.
이에 저는 GUI의 모든 Text에 converter를 적용할 수 있는지를 알고 싶습니다.
이 문제에 대해 도움을 주실 수 있을까요?
감사합니다.

2 Likes

스타일 정의가 있습니다. 이곳을 참고하시면 도움이 될 듯 합니다.

2 Likes

이 질문은 상위의 질문과 중복되기에 내용을 Link합니다.

2 Likes