我要一个背景透明的
ContentDialog,像下图一律。如何定制?写了一个简便的示范(https://github.com/ZhangGaoxing/uwp-demo/tree/master/ContentDialogDemo)

1、首先需要创造一个资源字典的文本,也就是一个xaml的文件。

图片 1

文件的语法格式如下

  首先在路里新建一个资源字典,并以 App.xaml
添加以下代码用这资源字典合并

Test.xaml

图片 2

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    xmlns:chartingToolkit="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit"
    xmlns:visualizationToolkit="clr-namespace:System.Windows.Controls.DataVisualization;assembly=System.Windows.Controls.DataVisualization.Toolkit">

<!--定义样式资源-->
 <Style x:Key="TextBlockStyle1" TargetType="TextBlock">
  <Setter Property="Foreground" Value="Orange"/>
  <Setter  Property="FontSize" Value="24"/>
  <Setter  Property="VerticalAlignment" Value="Bottom"/>
 </Style>

<!--定义数据模板资源-->

<DataTemplate x:Key="cityDetails">
  <Grid>
   <Grid.ColumnDefinitions>
    <ColumnDefinition Width="Auto" />
    <ColumnDefinition Width="90" />
   </Grid.ColumnDefinitions>
   <Grid.RowDefinitions>
    <RowDefinition />
    <RowDefinition />
   </Grid.RowDefinitions>
   <TextBlock Text="Activity: "
    Grid.Column="0"
    Grid.Row="0"
    Style="{StaticResource detailsSmallTitle}" />
   <TextBlock Text="{Binding Activity}"
    Grid.Column="1"
    Grid.Row="0"
    Style="{StaticResource detailsSmallText}" />
   ……

  </Grid>
 </DataTemplate>

<!--定义控件模板资源-->

 <ControlTemplate x:Key="ControlTemplateTest"
                     TargetType="chartingToolkit:Chart">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="Auto" />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="*" />
            </Grid.RowDefinitions>
            <visualizationToolkit:Title Grid.ColumnSpan="2"
                                        Content="{TemplateBinding Title}"
                                        Style="{TemplateBinding TitleStyle}" />
                  ……

        </Grid>
    </ControlTemplate>
</ResourceDictionary>
<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Style.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

Style的x:Key属性是资源字典里的资源的唯一的标示符,也是作为以其它页面调用的一个唯一的Key来开展调用。

  这时新增长的资源字典还是空的,我们得找到 ContentDialog
的默认样式。这些默认样式在已经设置之 Windows 10 SDK 中叫提供,比如 SDK
默认安装在 C
盘的时节,控件样式字典 generic.xaml 可以在 C:\Program Files
(x86)\Windows
Kits\10\DesignTime\CommonConfiguration\Neutral\UAP\10.0.14393.0\Generic

这里找到。找到后用 Visual Studio 打开,如下图。

2、调用资源资源遭受之资源

图片 3

于MainPage.xaml页面被上加资源字典,语法如下

  接下按 Ctrl+F 搜索 ContentDialog
找到默认样式复制到刚新建的资源字典中,然后根据需要定制样式即可。

<phone:PhoneApplicationPage.Resources>
  <ResourceDictionary>
   <ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="Test.xaml"/>
   </ResourceDictionary.MergedDictionaries>
  </ResourceDictionary>
 </phone:PhoneApplicationPage.Resources>

图片 4

ResourceDictionary.MergedDictionaries   获取 ResourceDictionary
字典的联谊,这些字典成了合并字典中的各种资源字典。 

  像我用之透明 ContentDialog 只需要再改 Property
BackgroundValue 值为 Transparent
即可。注意不要忘记吃一个 x:Key
值,也不怕是打个名称,这里呢 x:Key=”TransparentDialog” 。

假设想以程序启动时加载所有的资源,可以重复App.xaml页面及上加资源的加载,语法如下

 

<Application
    x:Class="DataVisualizationOnWindowsPhone.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone">



    <Application.Resources>
        <!-- 添加资源 -->
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Test.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>

……

</Application>

  样式定制就,并且资源字典也合并完成,下面就一旦当代码中去调用了。资源字典的调用也是依键值对,输入相应的键来返回对应之价。

3、使用字典资源中之资源

  于路适当的岗位新建一个 Style 类型的字段,用来取得样式。

于MainPage.xaml页面被的控件调用自定义之资源,语法如下

Style transparent = (Style)Application.Current.Resources["TransparentDialog"];

调用字典资源中x:Key值为TextBlockStyle1的体制资源

  样式获取成功后装置 ContentDialog 的 Style 属性即可

<StackPanel x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
   <TextBlock Text="Some Text" Style="{StaticResource TextBlockStyle1}"/>
  </StackPanel>
var contentDialog = new ContentDialog()
{
    Content = new Content("This is a transparent ContentDialog."),
    PrimaryButtonText = "确定",
    FullSizeDesired = false
};

contentDialog.Style = transparent;

contentDialog.PrimaryButtonClick += (_s, _e) =>
{
    contentDialog.Hide();
};
await contentDialog.ShowAsync();

调用字典资源中x:Key值为cityDetails的数码模板资源

  这样,一个定制样式的 ContentDialog 就完事了。

 <ContentControl ContentTemplate="{StaticResource cityDetails}"
                                        HorizontalAlignment="Left"
                                        x:Name="DetailsControl" Margin="0,0,0,5" />

调用字典资源中x:Key值为ControlTemplateTest的控件模板资源

 <charting:Chart x:Name="myChart"
                                    Style="{StaticResource PhoneChartStyle}"
                                    Template="{StaticResource ControlTemplateTest}">

……

</charting:Chart>

呢得于cs页面调用字典资源,语法如下

ControlTemplate template;

template = Application.Current.Resources["ControlTemplateTest"] as ControlTemplate;

myChart.Template = template;

再也多之牵线请参见MSDN的Silverlight资源字典介绍

MSDN的Silverlight资源字典详细介绍.aspx)

http://msdn.microsoft.com/zh-cn/library/cc903952(v=VS.95).aspx