在代码(UWP)中设置禁用按钮的前景色

时间:2016-06-09 21:18:34

标签: c# xamarin xamarin.forms uwp custom-renderer

我正在为提交按钮编写自定义渲染器,以便为我的 Xamarin.Forms 应用程序提供统一的样式。我在Windows(UWP)方面为禁用按钮设置前景(文本)颜色时遇到问题。

更改活动按钮的颜色就像

一样简单

Control.Foreground = new SolidColorBrush(Windows.UI.Colors.Green);

但是试图找出如何设置禁用按钮的前景色让我陷入了一个兔子洞。

我希望能够在不必使用XAML (like this approach)的情况下进行设置,因为我计划稍后提取这些渲染器。

1 个答案:

答案 0 :(得分:1)

最好的方法是,如果您可以编辑按钮的样式,或者在资源中的某个位置定义它,然后将其应用到按钮,甚至可以从代码中应用。

还有其他方法,理论上更简单,可以从代码中获得。如果您查看按钮的样式,您将看到禁用可视状态的部分:

<VisualState x:Name="Disabled">
    <Storyboard>
        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="RootGrid">
            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlBackgroundBaseLowBrush}"/>
        </ObjectAnimationUsingKeyFrames>
        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentPresenter">
            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlDisabledBaseMediumLowBrush}"/>
        </ObjectAnimationUsingKeyFrames>
        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="ContentPresenter">
            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlDisabledTransparentBrush}"/>
        </ObjectAnimationUsingKeyFrames>
    </Storyboard>
</VisualState>

您会看到使用该状态的画笔资源的名称。它应该足以在代码中更改它们以使所有禁用的按钮看起来像你想要的。虽然您需要记住,当用户更改主题并暂停您的应用时,这也会改变行为。

private void Button_Click(object sender, RoutedEventArgs e)
{
    App.Current.Resources["SystemControlBackgroundBaseLowBrush"] = new SolidColorBrush(Colors.Yellow); // background
    App.Current.Resources["SystemControlDisabledBaseMediumLowBrush"] = new SolidColorBrush(Colors.Red); // content
    App.Current.Resources["SystemControlDisabledTransparentBrush"] = new SolidColorBrush(Colors.Green); // border
}