WPF:只能使用一次StaticResource

时间:2017-07-17 22:24:16

标签: c# .net wpf xaml

我的WPF Windows XAML中定义了静态资源:

<Window.Resources>
    <Image x:Key="MyImage" Source="../Icons/img.png" Width="16" Height="16" Stretch="None" />
</Window.Resources>

我想用它两次次:

<Grid>
    <Button Content="{StaticResource MyImage}"  RenderOptions.BitmapScalingMode="NearestNeighbor" RenderOptions.EdgeMode="Aliased" />
</Grid>

...

<Grid>
    <Button Content="{StaticResource MyImage}"  RenderOptions.BitmapScalingMode="NearestNeighbor" RenderOptions.EdgeMode="Aliased" />
</Grid>

但它只显示为按钮图像一次。在最后一个按钮上。第一个按钮没有图像。

当我删除第二个按钮时,它适用于第一个按钮。如何多次使用StaticResource? Visual Studio GUI Designer在两个按钮上显示图像。

1 个答案:

答案 0 :(得分:13)

默认情况下,XAML资源是共享的,这意味着只有一个实例可以像在XAML中引用一样频繁地重用。

但是,Image控件(与任何其他UI元素一样)只能有一个父控件,因此无法共享。

您可以将x:Shared属性设置为false:

<Image x:Key="MyImage" x:Shared="false" Source="../Icons/img.png" Width="16" Height="16"/>

您通常不使用UI元素作为资源。另一种方法是像这样的BitmapImage资源:

<Window.Resources>
    <BitmapImage x:Key="MyImage" UriSource="../Icons/img.png"/>
</Window.Resources>

<Button>
    <Image Source="{StaticResource MyImage}" Width="16" Height="16"/>
</Button>