Кнопка ссылки в wpf

Преобразовав ключи списка в кортежи, вы можете сделать это примерно так:

Код:

result = {}
for k, v in packed_items.items():
    for i in v:
        result.setdefault(tuple(trucks_dict[k]), []).append(items_dict[i])

Код теста:

packed_items = {0: [0, 3],
                2: [1],
                1: [2]}
trucks_dict = {0: [9.5, 5.5, 5.5],
               1: [13.0, 5.5, 7.0],
               2: [16.0, 6.0, 7.0]}
items_dict = {0: [4.6, 4.3, 4.3],
              1: [4.6, 4.3, 4.3],
              2: [6.0, 5.6, 9.0],
              3: [8.75, 5.6, 6.6]}

result = {}
for k, v in packed_items.items():
    for i in v:
        result.setdefault(tuple(trucks_dict[k]), []).append(items_dict[i])
print(result)

Результаты:

{(9.5, 5.5, 5.5): [[4.6, 4.3, 4.3], [8.75, 5.6, 6.6]], 
 (16.0, 6.0, 7.0): [[4.6, 4.3, 4.3]], 
 (13.0, 5.5, 7.0): [[6.0, 5.6, 9.0]]
}
88
задан Prashant Cholachagudda 1 July 2010 в 05:07
поделиться

4 ответа

Если вы не хотите использовать какой-либо обычный стиль кнопок и просто хотите что-то, похожее на гиперссылку, вы можете начать с этого

<Button Margin="5" Content="Test" Cursor="Hand">
    <Button.Template>
        <ControlTemplate TargetType="Button">
            <TextBlock TextDecorations="Underline">
                <ContentPresenter />
            </TextBlock>
        </ControlTemplate>
    </Button.Template>
    <Button.Style>
        <Style TargetType="Button">
            <Setter Property="Foreground" Value="Blue" />
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="true">
                    <Setter Property="Foreground" Value="Red" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>

Вот то же самое, что и стиль:

<Style
    x:Key="LinkButton"
    TargetType="Button">
    <Setter
        Property="Template">
        <Setter.Value>
            <ControlTemplate
                TargetType="Button">
                <TextBlock
                    TextDecorations="Underline">
                <ContentPresenter /></TextBlock>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter
        Property="Foreground"
        Value="Blue" />
    <Style.Triggers>
        <Trigger
            Property="IsMouseOver"
            Value="true">
            <Setter
                Property="Foreground"
                Value="Red" />
        </Trigger>
    </Style.Triggers>
</Style>

и Вы можете использовать его следующим образом:

<Button Style="{StaticResource LinkButton}" Content="Clicky" />
143
ответ дан 24 November 2019 в 07:27
поделиться

Why do you not want to use Hyperlink?

<Button>
    <Hyperlink>
</Button>
2
ответ дан 24 November 2019 в 07:27
поделиться

Вот предложение MichaC, реализованное в виде стиля, который можно повторно использовать на любой кнопке:

<Style x:Key="LinkButton" TargetType="Button">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <TextBlock TextDecorations="Underline">
                    <ContentPresenter />
                </TextBlock>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="Foreground" Value="Blue" />
    <Setter Property="Cursor" Value="Hand" />
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="true">
            <Setter Property="Foreground" Value="Red" />
        </Trigger>
    </Style.Triggers>
</Style>
30
ответ дан 24 November 2019 в 07:27
поделиться
<Style x:Key="LinkButton" 
       TargetType="Button"
       BasedOn="{StaticResource ResourceKey={x:Type Button}}"
       >

    <Setter Property="Width" Value="Auto"/>

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <ContentPresenter Content="{TemplateBinding Content}" 
                                  ContentTemplate="{TemplateBinding  ContentTemplate}"
                                  VerticalAlignment="Center"
                                  >
                    <ContentPresenter.Resources>
                        <Style TargetType="{x:Type TextBlock}">
                            <Setter Property="TextDecorations" Value="Underline" />
                        </Style>
                    </ContentPresenter.Resources>
                </ContentPresenter>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="Foreground" Value="Blue" />
    <Setter Property="Cursor" Value="Hand" />
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="true">
            <Setter Property="Foreground" Value="Red" />
        </Trigger>
    </Style.Triggers>
</Style>

В версии MichaC и Андерсона подчеркивание размещено немного неправильно, вот обновленная версия, которая просто добавит подчеркивание к любому TextBlock, который находится внутри ContentPresenter.

33
ответ дан 24 November 2019 в 07:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: