样式控制模板作为图像

时间:2011-09-07 19:25:22

标签: wpf

我有两个项目,主要项目是窗口,另一个是ResourceLibrary。在Resourcelibrary里面我有一个名为logo的controltemplate。我想访问controltemplate并将其设置为主窗口中的图像。 controltemplate中的xaml标记是从图像导出到创建图像的路径。我怎么能这样做,我在app.xaml中引用资源路径,但仍然没有显示。有人知道一个可能证明这个的例子吗?

在MainWindow

<Image Grid.Row="2" Grid.Column="2" DataContext="{DynamicResource ResourceKey=Logo}" />

在ResourceLibrary中

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:my="clr-namespace:System;assembly=mscorlib"
xmlns:local="clr-namespace:ResourceLibrary">
<ControlTemplate x:Key="Logo">
path stuff
</ControlTemplate>
</ResourceDictionary

在App.xaml

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/ResourceLibrary;component/User Controls/Logo.xaml"></ResourceDictionary>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

固定 我使用了画布背景并将资源设置为使用可视化画笔,这很有用。

1 个答案:

答案 0 :(得分:0)

以下代码未经过测试和测试...仅供您参考...

  1. 我不明白为什么你需要一个ControlTemplate。将该路径本身作为资源字典中的资源公开。

       <Path x:Key="MyImagePath"
             Fill="..."
             Stretch="..."
             Stroke="..."
             StrokeThickness="..."
             Data="...">
            ...
        </Path>
    
  2. 然后使用转换器将此路径作为ImageSource托管。

    <Image Source="{Binding Source={StaticResource MyImagePath},
                            BindsDirectlyToSource=True,
                            Converter={StaticResource PathToImageConverter}}" />
    
  3. 使用此逻辑在PathToImageConverter类中将几何路径绘制到图像中.....

    public object Convert(
                 object value,
                 Type targetType,
                 object parameter,
                 System.Globalization.CultureInfo culture)
    {
        Path MyPath = value as Path; 
        var dGroup = new DrawingGroup();
        using (DrawingContext dc = dGroup.Open())
        {
            dc.DrawGeometry(
                 MyPath.Fill,
                 new Pen(MyPath.Stroke, MyPath.StrokeThickness),
                 MyPath.Data);
        }
    
        return new DrawingImage(dGroup); 
    }
    
  4. 如果有帮助,请告诉我。