【问题标题】:Binding to the DataContext within a Style results in a 'catastrophic failure?'在 Style 中绑定到 DataContext 会导致“灾难性失败?”
【发布时间】:2016-01-29 18:17:14
【问题描述】:

我正在尝试从 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,但无济于事;每次都会弹出相同的错误信息。

为什么会发生这种情况,我可以做些什么来解决它?

【问题讨论】:

  • 对我来说很好用。你能给 MenuItem 课吗?

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


【解决方案1】:
Windows 运行时 不支持 Setter 值中的绑定 - 看看 at MSDN:

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

您也可以查看here at Clemens answer 寻找解决方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-04
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    • 2020-04-12
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    相关资源
    最近更新 更多