WPF - привязать векторное изображение к расширенной подсказке - PullRequest
0 голосов
/ 10 марта 2019

Прежде всего, я искренне благодарю это сообщество за всю помощь, которую я получил за последние 3 месяца, с тех пор как я начал играть с C # и WPF.Я совершенно новичок в этом мире, поэтому, пожалуйста, потерпите меня.

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

<Viewbox>
    <Canvas>
        <Geometry .../>
    </Canvas>
</Viewbox>

Все значки хранятся в ResourceDictionary:

<DataTemplate x:Key="myIcon">
    <Viewbox>
        <Canvas>
            <Geometry .../>
        </Canvas>
    </Viewbox>
</DataTemplate>

и назначаются соответствующей кнопкечерез ContentPresenter:

<Button x:Name="myButton">
    <Button.ToolTip>
        <myDependencyProperties:EnhancedTooltip Header="Main" Style="{StaticResource EnhancedTooltip}" Content="Main Page"/>
    </Button.ToolTip>
    <Button.Content>
        <ContentPresenter ContentTemplate="{StaticResource myIcon}"/>
    </Button.Content>
</Button>

Элемент управления My Enhanced Tooltip должен отображать, среди прочего, значок родительской кнопки (как это имеет место для некоторых кнопок в ленте MS Office).Я пробовал несколько способов привязать содержимое всплывающей подсказки, добавив метку или кнопку и привязав ее содержимое к кнопке, например:

<ContentPresenter ContentTemplate="{Binding Path=ManyDifferentAttempts, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Button}}}"/>

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

<Button x:Name="myButton">
    <Button.ToolTip>
        <myDependencyProperties:EnhancedTooltip Header="Main" Style="{StaticResource EnhancedTooltip}" Content="Main Page"/>
    </Button.ToolTip>
    <ContentControl Style="{StaticResource myIcon}"/>
</Button>

, где значки, конечно, хранятся как стили:

<Style x:Key="myIcon" TargetType="ContentControl">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ContentControl">
                <Viewbox>
                    <Canvas>
                        <Geometry .../>
                    </Canvas>
                </Viewbox>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

и добавил элемент управления содержимым (меткаили кнопку) в EnhancedTooltip, чтобы имитировать поведение родительской кнопки, привязав ее стиль ContentPresenter к стилю родительской кнопки.Без какого-либо успеха.

Я мог легко достичь своей цели, когда использовал изображение (png) в качестве значка для моей кнопки:

<Button x:Name="myButton">
    <Button.ToolTip>
        <myDependencyProperties:EnhancedTooltip Header="Main" Style="{StaticResource EnhancedTooltip}" Content="Main Page"/>
    </Button.ToolTip>
    <Image Source="PathToMyPNGImage"/>
</Button>

и в своем стиле EnhancedTooltip:

<Image Source="{Binding Path=Content.Source, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Button}} }"/>

Как я могу достичь того же результата, когда я решил вместо этого использовать векторное изображение?Я легко могу вернуться к предыдущему подходу, но я хотел бы узнать что-то новое.

Спасибо за ваше время.

Марко

1 Ответ

0 голосов
/ 10 марта 2019

Вы не можете просто показать геометрию.

Используйте путь.

Установите или свяжите его данные с одной из ваших геометрий.

Потерять окно просмотра - и, вероятно, холст. Создайте путь к содержимому, если у вас есть contentcontrol.

Установите растяжение, чтобы заполнить путь.

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

    <Button x:Name="myButton"
            Tag="{StaticResource Star}"
            >
        <Button.Content>
            <Path Fill="Blue"
                  Data="{Binding Tag, RelativeSource={RelativeSource AncestorType=Button}}"/>
        </Button.Content>
        <Button.ToolTip>
            <ToolTip>
                <Path Fill="Blue"
                      Data="{Binding PlacementTarget.Tag, RelativeSource={RelativeSource AncestorType={x:Type ToolTip}}}"/>
            </ToolTip>
        </Button.ToolTip>
    </Button>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...