【问题标题】:DynamicResource only for one binding?DynamicResource 仅用于一个绑定?
【发布时间】:2015-05-17 08:59:52
【问题描述】:

我创造风格。此样式为导航创建箭头

<Style TargetType="MenuItem" x:Key="navigation_arrow">
    <Setter Property="Icon">
        <Setter.Value>
            <DockPanel LastChildFill="True" HorizontalAlignment="Center" VerticalAlignment="Center">
                <DockPanel.LayoutTransform>
                    <RotateTransform Angle="0"/>
                </DockPanel.LayoutTransform>
                <Grid>
                <Canvas>
                    <Canvas.RenderTransform>
                        <TransformGroup>
                            <ScaleTransform ScaleX="0.5" ScaleY="0.5"/>
                        </TransformGroup>
                    </Canvas.RenderTransform>
                    <Rectangle Fill="LightBlue" Width="24" Height="6" Canvas.Left="2" Canvas.Top="1" RenderTransformOrigin="0,0">
                        <Rectangle.RenderTransform>
                            <TransformGroup>
                                <ScaleTransform/>
                                <SkewTransform/>
                                <RotateTransform Angle="30.277"/>
                                <TranslateTransform X="-0.79314" Y="-2.18035"/>
                            </TransformGroup>
                        </Rectangle.RenderTransform>
                    </Rectangle>
                    <Rectangle Fill="LightBlue" Width="44" Height="6" Canvas.Left="2" Canvas.Top="-1" RenderTransformOrigin="0.5,0.5"/>
                    <Polygon Fill="LightBlue" Points="0,12, 12,12, 6,1.6" Canvas.Left="-7" Canvas.Top="-4" RenderTransformOrigin="0,0.5">
                        <Polygon.RenderTransform>
                            <TransformGroup>
                                <ScaleTransform/>
                                <SkewTransform/>
                                <RotateTransform Angle="-89.8"/>
                                <TranslateTransform X="5.97906" Y="5.99996"/>
                            </TransformGroup>
                        </Polygon.RenderTransform>

                    </Polygon>
                    <Rectangle Fill="LightBlue" Width="24" Height="6" Canvas.Left="-1" Canvas.Top="2" RenderTransformOrigin="1,0">
                        <Rectangle.RenderTransform>
                            <TransformGroup>
                                <ScaleTransform/>
                                <SkewTransform/>
                                <RotateTransform Angle="-30.277"/>
                                <TranslateTransform X="-4.00853" Y="-14.1804"/>
                            </TransformGroup>
                        </Rectangle.RenderTransform>
                    </Rectangle>
                </Canvas>
                </Grid>
            </DockPanel>
        </Setter.Value>
    </Setter>
</Style>

然后我将这个样式设置为 MenuItem

<MenuItem Style="{DynamicResource navigation_arrow}" Command="NavigationCommands.BrowseBack" />
<MenuItem Style="{DynamicResource navigation_arrow}" Command="NavigationCommands.BrowseForward" />

我看到第一个 MenuItem 失去了 hist 样式并变为空。但第二个 MenuItem 应用这种样式。如何解决这个问题?

【问题讨论】:

  • 您的错误与 DynamicResource 绑定无关。当然,它应该适用于少数项目。我认为您的错误在其他地方。尝试添加更多 MenuItems,更改为其他 DynamicResource 样式等。分享它,以便我们为您提供帮助!
  • 张贴显示结果的图片。
  • 请添加更多关于您的风格的细节。真正的控件模板是什么样子的(没有...)?
  • 它是导航的样式(后退和前进)我使用 DynamicResource 为几个按钮创建了样式,并且一切正常。但在这种情况下,我不理解为什么它不起作用!
  • 问题在于,在您的情况下,DockPanel 及其内容的值仅创建一次,即使该样式被更频繁地使用。因为 DockPanel 是一个 UIElement,它只能被使用和显示一次。换句话说,每个 Icon 都分配了相同的 UIElement 实例,并且只有最后一次使用才能显示它。我仍然不确定是否有一个好的解决方案。

标签: wpf xaml


【解决方案1】:

目前看到的唯一解决方案,加x:Shared="False"

    <Style x:Key="navigation_arrow"
           TargetType="Button"
           x:Shared="False">
     ...

你的风格。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    • 2017-12-05
    • 2018-04-29
    • 1970-01-01
    相关资源
    最近更新 更多