gpt4 book ai didi

c# - 作为可重用 XAML 片段的矢量图像

转载 作者:太空狗 更新时间:2023-10-29 17:33:00 25 4
gpt4 key购买 nike

我想在某些 WPF 应用程序/库中重用一些 XAML 片段作为图像。

问题背景如下:

在 WPF 应用程序中重用位图图像很容易。图片可以作为资源添加,我可以使用 <Image Source="packURI"/>在 XAML 中的许多地方,因此图像将是相同的。

但我希望有可能对矢量图像执行相同的操作。图像本身可以表示为 Path ,但我不能重复使用相同的 Path作为一种资源,因为禁止在多个不同的地方(并且可能从多个 UI 线程)简单地使用它(UI 元素只能有一个逻辑父元素)。

此外,如果我想从多个 Path 构建“图像”,问题就会变得更加复杂。 s,使用 Canvas为了它。或者一些任意的 XAML 代码。

我尝试使用 Style对于 Path ,所以图像以这样的方式表示:

<Path Style={StaticResource VectorImage1}/>

这似乎是一种可重用的方式,但我担心两个问题:

  1. 如果矢量图像的实现从 Path 改变到(例如)Canvas ,我不仅需要在样式中替换它,而且在使用它的源代码中的所有地方都需要替换它。
  2. 使用样式定义路径似乎过于冗长。
  3. 我认为无法概括这种使用 Canvas 的方法或任意 XAML 代码。
  4. 语法似乎很不自然。

还有其他方法可以通过定义 UserControl 来获得可重用的 XAML 片段。 , 但为每个矢量图像定义一个单独的用户控件似乎有点矫枉过正。

是否有更好、更好、更正确的方法来定义可重用的 XAML 片段?

最佳答案

您可以将 x:Shared 属性添加到 Path Resource 并将其用作 StaticResource。如果“MyVectorImage”更改为其他内容,这将起作用

更新
可能最好使用 ContentControl 或类似的方法来添加属性,例如边距等。

<Window.Resources>
<Path x:Key="MyVectorImage"
x:Shared="False"
Stroke="DarkGoldenRod"
StrokeThickness="3"
Data="M 10,20 C 10,25 40,35 40,17 H 28"
Stretch="Fill"
Width="100"
Height="40"/>
</Window.Resources>
<StackPanel>
<ContentControl Margin="10" Content="{StaticResource MyVectorImage}"/>
<ContentControl Margin="10" Content="{StaticResource MyVectorImage}"/>
</StackPanel>

例子。您将“MyVectorImage”替换为包含两个路径的 StackPanel。

<Window.Resources>
<StackPanel x:Key="MyVectorImage"
x:Shared="False">
<Path Stroke="DarkGoldenRod"
StrokeThickness="3"
Data="M 10,20 C 10,25 40,35 40,17 H 28"
Stretch="Fill"
Width="100"
Height="40"/>
<Path Stroke="DarkGoldenRod"
StrokeThickness="3"
Data="M 10,20 C 10,25 40,35 40,17 H 28"
Stretch="Fill"
Width="100"
Height="40"/>
</StackPanel>
</Window.Resources>

关于c# - 作为可重用 XAML 片段的矢量图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4387349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com