C#
WPF

文字色をコードで変更する方法

文字色をコードで変更する

経緯

 ある数値が指定の値になった場合のみボタンの文字色を変更して、
 かつそのボタンを非活性化にしたかったので、FormのようにEnabledをfalseにすれば
 ボタンが非活性化かつ色が変わると思っていましたが、ボタンには既にTriggerで押下時に
 色が変わるように設定してあったので、Enabledをfalseにしても非活性化になるだけで、
 ボタンの色も文字色も変化しませんでした。なので、調べる事になりました。
 尚、ここで記載するタグにはそのTriggerの記述を省き、ボタンの押下回数が2回目の時に、
 文字色を赤色に変更する記述にしています。

タグ

<Grid>
    <Button Name="BtnOK" HorizontalAlignment="Left" Margin="165,183,0,0" VerticalAlignment="Top" Width="75">
        <TextBlock x:Name="txt_Ok" Text="OK"/>
    </Button>
    <Button Name="BtnCancel" HorizontalAlignment="Left" Margin="289,183,0,0" VerticalAlignment="Top" Width="75" Click="BtnCancel_Click">
        <TextBlock x:Name="txt_Cancel" Text="キャンセル"/>
    </Button>
    <TextBlock x:Name="txtAnswer" HorizontalAlignment="Left" Margin="143,108,0,0" TextWrapping="Wrap" Text="0" VerticalAlignment="Top" Height="25" Width="126" FontSize="20"/>
    <Button Name="BtnPuls" HorizontalAlignment="Left" Margin="289,108,0,0" VerticalAlignment="Top" Width="75" Click="BtnPuls_Click">
        <TextBlock x:Name="txtPuls" Text="+" FontSize="25"/>
    </Button>

</Grid>

コード

    private void BtnPuls_Click(object sender, RoutedEventArgs e)
    {
        num++;
        txtAnswer.Text = num.ToString();
        if (num == 2)
        {
            BtnOK.Foreground = new SolidColorBrush(Colors.Red);
            BtnOK.IsEnabled = false;
        }
        else
        {
            BtnOK.Foreground = new SolidColorBrush(Colors.Black);
            BtnOK.IsEnabled = true;
        }
    }

    private void BtnCancel_Click(object sender, RoutedEventArgs e)
    {
        num = 0;
        txtAnswer.Text = num.ToString();
        BtnOK.IsEnabled = true;
        BtnOK.Foreground = new SolidColorBrush(Colors.Black);
    }

結果

1回目

 image.png

2回目

image.png

3回目

image.png