Как установить содержимое «BitmapIcon» или «PathIcon» из «Canvas», хранящегося в словаре ресурсов? - PullRequest
0 голосов
/ 24 мая 2018

Как установить содержимое «BitmapIcon» или «PathIcon» из «Canvas», хранящегося в словаре ресурсов?

<ResourceDictionary ...>
    <Canvas x:Key="appbaricon" Height=77 Width=77>
        <Path Fill="#FF000000" Data="F1 M 25.3333,42.75C 26.5189, ..."/>
    </Canvas>
</ResourceDictionary>

...

<BitmapIcon  ???Content???="{StaticResource appbaricon}">

Есть ли способ установить содержимое BitmapIcon с помощью Canvas из Resource Dictionary?как в:

<AppBarButton Label="BitmapIcon" Click="AppBarButton_Click">
    <AppBarButton.Icon>
        <BitmapIcon ???Content???="{StaticResource appbaricon}">
    </AppBarButton.Icon>
</AppBarButton>

1 Ответ

0 голосов
/ 25 мая 2018

Ресурсами могут быть любые общие объекты, такие как стили, шаблоны, кисти и цвета.Однако элементы управления, фигуры и другие FrameworkElements недоступны для совместного использования, поэтому они не могут быть объявлены как ресурсы многократного использования.Для получения дополнительной информации об общем доступе см. Раздел XAML, который должен быть доступен для общего доступа раздел.

Canvas - это элемент управления, который нельзя использовать совместно, и который вы не можете использовать напрямую, так какодин ресурс.В качестве обходного пути я рекомендую вам создать собственный стиль AppBarButton в качестве ресурса и настроить его.Внутри нового стиля AppBarButton вы можете заменить содержимое по умолчанию Icon на Canvas, которое вы определили выше, Icon определяется элементом управления ViewBox в стиле с именем ContentViewbox.Например:

<Page.Resources> 
    <Style x:Key="AppBarButtonStyle1" TargetType="AppBarButton">    
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="AppBarButton">
                    <Grid x:Name="Root" Background="{TemplateBinding Background}" BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}" MinWidth="{TemplateBinding MinWidth}" MaxWidth="{TemplateBinding MaxWidth}">
                        ...

                        <Grid x:Name="ContentRoot" MinHeight="{ThemeResource AppBarThemeMinHeight}"> 
                        ...
                            <Viewbox x:Name="ContentViewbox" AutomationProperties.AccessibilityView="Raw" HorizontalAlignment="Stretch" Height="20" Margin="0,14,0,4">
                                <ContentPresenter x:Name="Content"  Foreground="{TemplateBinding Foreground}" Height="20">
                                    <Canvas Height="77" Width="77">
                                        <Path Data="F1 M 16,12 20,2L 20,16 1,16" Fill="#FF000000"/>
                                    </Canvas>
                                </ContentPresenter>
                            </Viewbox>
                          ...
                        </Grid>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Page.Resources>

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">    
    <AppBarButton Style="{StaticResource AppBarButtonStyle1}" Label="PathIcon" />
</Grid>
...