我正在尝试绑定DataContext
内的Style
元素,这由于某种原因导致XAML解析器中出现“灾难性故障”。这是代码:
<UserControl
x:Class="Sirloin.AppView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Sirloin"> <!--A few lines omitted for brevity-->
<UserControl.Resources>
<ResourceDictionary>
<Style x:Key="MenuButtonStyle" TargetType="Button">
<Setter Property="Background" Value="Transparent"/>
<!--This fails-->
<Setter Property="Content" Value="{Binding Symbol}"/>
<Setter Property="FontFamily" Value="Segoe MDL2 Assets"/>
<!--And this too-->
<Setter Property="Width" Value="{Binding CompactPaneLength, ElementName=splitView}"/>
</Style>
</ResourceDictionary>
</UserControl.Resources>
<SplitView x:Name="splitView" DisplayMode="CompactOverlay">
<SplitView.Pane>
<Grid>
<!--The hamburger-->
<Button Grid.Row="0" Style="{StaticResource MenuButtonStyle}">
<Button.DataContext>
<local:MenuItem Symbol=""/>
</Button.DataContext>
</Button>
</Grid>
</SplitView.Pane>
</SplitView>
</UserControl>
当我尝试在Visual Studio中编译它时,这是导致错误消息:
我尝试使用Bindings
稍微改变RelativeSource
,但无济于事;每次弹出相同的错误信息。
为什么会发生这种情况,我该怎么做才能解决它?
答案 0 :(得分:2)
Windows Presentation Foundation(WPF)和Microsoft Silverlight支持使用Binding表达式为样式中的Setter提供值的功能。 Windows运行时不支持Setter.Value的绑定用法(Binding不会评估,而Setter没有效果,你不会得到错误,但你不会得到期望的结果)。从WPF或Silverlight XAML转换XAML样式时,将任何Binding表达式用法替换为设置值的字符串或对象,或将值重构为共享{StaticResource}标记扩展值而不是Binding获取的值。
您还可以查看here at Clemens answer以获得解决方法。