在Windows Phone通用应用程序中更改内容对话框按钮的样式

时间:2015-02-16 09:42:44

标签: c# xaml windows-phone-8.1 styles win-universal-app

我在xaml中定义了这个内容对话框:

    <ContentDialog x:Name="AlertMessage" Background="#363636" IsSecondaryButtonEnabled="True" SecondaryButtonText="Cancel"  IsPrimaryButtonEnabled="True" PrimaryButtonText="Ok" >
        <ContentDialog.Content>
            <StackPanel Name="rootStackPanel" Height="Auto"  >
                <StackPanel Margin="0">
                    <StackPanel Margin="0,0,0,10" Orientation="Horizontal">
                        <TextBlock x:Name="HeadingText" x:FieldModifier="public" Style="{StaticResource ApplicationMessageBoxHeadingStyle}" Text="Alert"  />
                        <Image Margin="10,05,0,0" Source="/Assets/Images/alert.png" Width="35"></Image>
                    </StackPanel>
                    <TextBlock x:FieldModifier="public" x:Name="ContentText" Style="{StaticResource ApplicationMessageBoxErrorStyle}" Text="Are you sure you want to log off ?" />
                </StackPanel>
            </StackPanel>
        </ContentDialog.Content>
    </ContentDialog>

我称之为:

private void AppBarButton_Click(object sender, RoutedEventArgs e)
    {
        MessageBox();
    }
    private async void MessageBox()
    {
        ContentDialogResult LogoutDialog = await AlertMessage.ShowAsync();

        if (LogoutDialog == ContentDialogResult.Primary)
        {
            this.Frame.Navigate(typeof(MainPage));
        }
        else
        {
            // User pressed Cancel or the back arrow.
            // Terms of use were not accepted.
        }

    }

问题:是我的应用为我的应用中的所有按钮设置了样式。我想将相同的样式应用于该对话框的主要和次要按钮。我无法弄清楚如何实现这一目标。是否可以将样式应用于这些按钮?

4 个答案:

答案 0 :(得分:5)

如果你想在ContenDialog.Resources中更改你需要的ContendDialog PrimaryButtonSettings,只需设置一个你要定位按钮的样式和带有属性的Setter =&#34;&#34;和价值=&#34;&#34;下面应该解决的是一个例子。

Converter={StaticResource StringEmptyToBoolConverter}}"
<ContentDialog.Resources>
    <converters:StringEmptyToBoolConverter x:Key="StringEmptyToBoolConverter"/>
    <Style TargetType="Button">
        <Setter Property="HorizontalContentAlignment" Value="Left"/>
        <Setter Property="FontSize" Value="13.6"/>
        <Setter Property="Width" Value="Auto"/>
    </Style>
</ContentDialog.Resources>
<WebView Height="400" Width="500" DefaultBackgroundColor="Transparent" Source="{Binding State.GuideUri}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" x:Name="RulesWebView"/>

答案 1 :(得分:4)

您可以间接自定义按钮。 ContentDialog的按钮使用&#34;默认&#34;目标类型的样式&#34;按钮&#34;。您可以覆盖SDK的ContentDialog样式,并在模板的Setter中添加不同的Button Style。此按钮样式仅在ContentDialog控件的范围内有效。

在这个例子中,新的按钮样式需要放在第一个边框元素中(x:Name =&#34; Container&#34;)

<Border.Resources>
  <Style TargetType="Button" BasedOn="{StaticResource YourNormalButtonStyle}">
    <Setter Property="BorderBrush" Value="Red"/>
    <Setter Property="Foreground" Value="Red"/>
  </Style>
</Border.Resources>

答案 2 :(得分:1)

ContentDialog按钮不可自定义,但您可以取消设置ContentDialog的主要和辅助按钮,并在模板中添加自己的按钮。

答案 3 :(得分:0)

我使用此代码更改了UWP应用上的按钮颜色。

 var cd = new ContentDialog();
 cd.Content = "Remove file ?";
 cd.Title = "Remove file";
 cd.PrimaryButtonText = "OK";
 cd.SecondaryButtonText = "Cancel";
 var bst = new Windows.UI.Xaml.Style(typeof(Button));
 bst.Setters.Add(new Setter(Button.BackgroundProperty, Colors.Red));
 bst.Setters.Add(new Setter(Button.ForegroundProperty, Colors.White));
 cd.PrimaryButtonStyle = bst;
 var ress = await cd.ShowAsync();

enter image description here