绑定到Style中的DataContext会导致“灾难性故障?”

时间:2016-01-29 18:17:14

标签: c# xaml windows-10 win-universal-app uwp

我正在尝试绑定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="&#xE700;"/>
                    </Button.DataContext>
                </Button>
            </Grid>
        </SplitView.Pane>
    </SplitView>
</UserControl>

当我尝试在Visual Studio中编译它时,这是导致错误消息:

我尝试使用Bindings稍微改变RelativeSource,但无济于事;每次弹出相同的错误信息。

为什么会发生这种情况,我该怎么做才能解决它?

1 个答案:

答案 0 :(得分:2)

Windows运行时不支持 Setter的值中的绑定 - 看看at MSDN

  

Windows Presentation Foundation(WPF)和Microsoft Silverlight支持使用Binding表达式为样式中的Setter提供值的功能。 Windows运行时不支持Setter.Value的绑定用法(Binding不会评估,而Setter没有效果,你不会得到错误,但你不会得到期望的结果)。从WPF或Silverlight XAML转换XAML样式时,将任何Binding表达式用法替换为设置值的字符串或对象,或将值重构为共享{StaticResource}标记扩展值而不是Binding获取的值。

您还可以查看here at Clemens answer以获得解决方法。