Можно ли использовать данные Shapes.Path в качестве источника изображения в WPF?

Я использую некоторую векторную графику в своем приложении WPF, к которому я обращаюсь через ResourceDictionary. Сейчас я создаю TreeView, где я хотел бы заменить изображения по умолчанию, используемые для предварения узлов векторной графикой. Определение разных изображений для узлов — это кусок пирога, если они являются реальными изображениями, но можно ли каким-либо образом использовать элемент Path в качестве источника изображения в TreeView?

Я бы предпочел использовать векторы, а не настоящие изображения, потому что я использую векторную графику в других областях сайта, и было бы предпочтительнее иметь только один источник изображения.

Пример записи в ResourceDictionary выглядит следующим образом:

<ControlTemplate x:Key="MyPath">
   <Viewbox>
      <Grid>
         <Path Data="F1M2357.31445,2509.047846875L2456.35742,2509.047846875C2461.00781,2509.047846875,2464.78906,2504.952146875,2464.78906,2499.916996875C2464.78906,2494.881836875,2461.00781,2490.785156875,2456.35742,2490.785156875L2357.31445,2490.785156875C2352.66602,2490.785156875,2348.88477,2494.881836875,2348.88477,2499.916996875C2348.88477,2504.952146875,2352.66602,2509.047846875,2357.31445,2509.047846875z" Fill="White" Stretch="Fill" />            
      </Grid>
    </Viewbox>
 </ControlTemplate>

person Random    schedule 11.12.2013    source источник


Ответы (1)


Я не уверен, о каких изображениях по умолчанию вы говорите, но в WPF вы можете просто определить DataTemplate для своих элементов, которые содержат любые выбранные вами элементы пользовательского интерфейса. Поэтому нет причин использовать Image для отображения векторной графики:

<TreeView.ItemTemplate>
    <DataTemplate>
        <StackPanel Orientation="Horizontal">
            <Path Data="F1M2357.31445,2509.047846875L2456.35742,2509.047846875C2461.00781,2509.047846875,2464.78906,2504.952146875,2464.78906,2499.916996875C2464.78906,2494.881836875,2461.00781,2490.785156875,2456.35742,2490.785156875L2357.31445,2490.785156875C2352.66602,2490.785156875,2348.88477,2494.881836875,2348.88477,2499.916996875C2348.88477,2504.952146875,2352.66602,2509.047846875,2357.31445,2509.047846875z" Fill="White" Stretch="Fill" />
            <ContentPresenter Content="{Binding}" Margin="5,0,0,0" />
        </StackPanel>
    </DataTemplate>
</TreeView.ItemTemplate>
person Sheridan    schedule 11.12.2013
comment
Что, если вы хотите использовать его как LargeImageSource для RibbonButton? - person Martin Andersen; 11.05.2014
comment
Как видно из RibbonButton.LargeImageSource Property в MSDN, это свойство имеет тип ImageSource. Поскольку это не имеет отношения к объекту Path, вы не можете напрямую установить его как значение LargeImageSource. Сначала вам нужно создать образ из него. - person Sheridan; 12.05.2014
comment
Вы можете узнать, как создать изображение из Visual из моего ответа на System.Drawing.Image из ImageSource в разделе "Ресурсы" здесь, в Stack Overflow. - person Sheridan; 12.05.2014