为StaticResource Canvas中的Path设置不同的大小或自动调整大小

时间:2014-03-26 09:55:12

标签: c# .net wpf xaml canvas

我使用ResourceDictionary表示我的所有图标:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <Canvas x:Key="Icon.Refresh"
            Width="32" Height="32"
            Clip="F1 M 0,0L 32,0L 32,32L 0,32L 0,0">
        <Path Width="28" Height="28"
              Canvas.Left="2" Canvas.Top="2"
              Stretch="Fill"
              Data="..." /> 
    </Canvas>
 </ResourceDictionary>

实际的XAML:

<Button Content="{StaticResource Icon.Refresh}"
        Height="40" 
        Width="40" />

这很好用,因为我的大部分按钮都是这么大。但是当我想在较小的按钮上使用它时会溢出按钮:

<Button Content="{StaticResource Icon.Refresh}"
        Height="30" 
        Width="30" />

ReloadButton

有没有办法设置StaticResource的大小或其他任何聪明的事情?

2 个答案:

答案 0 :(得分:4)

我想你可以将Canvas放在<ViewBox>内,以便自动缩小。

答案 1 :(得分:3)

在这种情况下,Canvas不是必需的,因此作为路径的属性Canvas.LeftCanvas.Top。据我所知,它会自动添加生成这些路径的应用程序(例如Blend)。此外,每个Path面板画布的性能保持成本非常高。

您无需存储资源的宽度和高度,而不是将Stretch="Fill"添加到路径:

<Button Width="30" Height="30">
    <Path Name="MyPath"              
          Fill="Bisque"
          Stretch="Fill"
          Data="..." />
</Button>

最重要的是,对象路径为 Data 。您需要执行以下操作:

在资源App.xaml<Window.Resources>等中,使用密钥添加路径:

<Path x:Key="MyPath" Data="F1 M 0,0L ..." />

Style或其他地方使用如下:

<Path x:Name="MyPathButton"
      ...
      Fill="{StaticResource ButtonBackground}" 
      Data="{Binding Source={StaticResource MyPath}, Path=Data}" />

或者这样做:将数据放入Geometry

<Geometry x:Key="MagnifierIconGeometry">M44,12 C32,12 22,22 22,34 22,46 32,56 44,56 56,56 66,46 66,34 66,22 56,12 44,12z M44,0 C63,0 78,15 78,34 78,53 63,68 44,68 40,68 36.5,67.5 33,66 L32.5,66 14,90 0,79.5 18,55.5 17,55 C13,49 10,42 10,34 10,15 25,0 44,0z</Geometry>

并像这样使用:

<Path Data="{StaticResource MagnifierIconGeometry}" 
      Fill="Black"
      Stretch="Fill" />