繁体   English   中英

在样式内绑定到DataContext会导致“灾难性失败?”

[英]Binding to the DataContext within a Style results in a 'catastrophic failure?'

我正在尝试从Style绑定到元素的DataContext ,由于某种原因,这会导致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 ,但无济于事。 每次都会弹出相同的错误消息。

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

Windows运行时不支持在Setter的值中进行绑定-看一下MSDN

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

您也可以在此处查看Clemens答案以找到解决方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM