如果我的项目正在使用代码(App.cs 与 App.Xaml),我可以在 Xaml 中定义一个样式以在代码中引用吗?

If my project is using code (App.cs vs. App.Xaml), can I have a style defined in Xaml that I can reference in code?

我正在尝试自定义 UWP 中选择器的外观(我想删除下拉箭头),并且我在 UWP App.Xaml 中定义了一个控件模板,类似于:

<Application
    x:Class="StoreFulfillment.UWP.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:StoreFulfillment.UWP"
    RequestedTheme="Light">
    <Application.Resources>
        <ResourceDictionary>
            <Style x:Name="PickerStyle" TargetType="ComboBox">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="ComboBox">
                            <Grid>
                            ...
                            ...
                            ...
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </ResourceDictionary>
    </Application.Resources>
</Application>

并且在我的选择器自定义渲染器中,我想将 Picker UWP 控件(它是一个 ComboBox)的 Style 属性 设置为 Xaml 中定义的 PickerStyle,像这样:

protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
{
    base.OnElementChanged(e);
    ...
    ...
    ...
    Control.Style = (Windows.UI.Xaml.Style)Application.Current.Resources["PickerStyle"];
}

但是 Application.Current.Resources 不包含我在 Xaml 中定义的样式。我如何引用它或从自定义渲染器访问它?

您缺少 Style 上的 x:Key 属性,无法像这样检索它。您可以找到更多详细信息 here.

<Style x:Key="PickerStyle" TargetType="ComboBox">
    <Setter Property="Template">
        <Setter.Value>
            ...

资源可以有 KeyName。不建议同时指定两者。在您的情况下 - 如果 Control 是在 Application 中定义的,您可以简单地说 Control.Style = this.PickerStyle;。如果它在不同的页面中,您也许可以这样做 Control.Style = ((App)Application.Current).PickerStyle; 如果您更愿意使用资源密钥 - 请遵循 G 的回答。