我尝试在UWP中自定义Picker的外观(我想删除下拉箭头),并且我在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中定义的样式。如何引用它或从自定义渲染器访问它?
答案 0 :(得分:2)
您错过了x:Key
上的Style
属性,因为它可以像这样检索它。您可以找到更多详细信息here。
<Style x:Key="PickerStyle" TargetType="ComboBox">
<Setter Property="Template">
<Setter.Value>
...
答案 1 :(得分:1)
资源可以有Key
或Name
。不建议同时指定两者。在您的情况下 - 如果Control.Style = this.PickerStyle;
中定义Control
,您可以简单地说Application
。如果它位于不同的页面中,您可以执行Control.Style = ((App)Application.Current).PickerStyle;
如果您更愿意使用资源键 - 请按照G的回答。