ItemControl пользовательский стиль первый элемент - PullRequest
0 голосов
/ 19 сентября 2018

У меня «ItemsControl» с 4 кнопками, и при применении поля первая кнопка не выглядит так, как мне бы хотелось.Можно ли изменить поле первой кнопки?Или можно получить доступ к каждой кнопке и применить к ней различные свойства?Спасибо

            <ItemsControl ItemsSource="{Binding PercentageList}">
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <UniformGrid Columns="{Binding PercentageList.Count}" />
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <Button Margin="5,0,0,0"
                                Content="{Binding Name}"
                                CommandParameter="{Binding}"
                                Style="{StaticResource ButtonStyle}"
                                Command="{Binding DataContext.SelectedPercentageCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" />
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>

enter image description here

ЗАКЛЮЧИТЕЛЬНОЕ РЕШЕНИЕ

<ItemsControl ItemsSource="{Binding PercentageList}"
              AlternationCount="{Binding PercentageList.Count}">
    <ItemsControl.ItemContainerStyle>
        <Style>
            <Setter Property="FrameworkElement.Margin"
                    Value="5,5,0,5" />
        </Style>
    </ItemsControl.ItemContainerStyle>
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <UniformGrid Columns="{Binding PercentageList.Count}" />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Button Content="{Binding Name}"
                    CommandParameter="{Binding}"
                    Style="{StaticResource ButtonStyle}"
                    Command="{Binding DataContext.SelectedPercentageCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" />
            <DataTemplate.Triggers>
                <Trigger Property="ItemsControl.AlternationIndex"
                         Value="0">
                    <Setter Property="Margin"
                            Value="0,5" />
                </Trigger>
            </DataTemplate.Triggers>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Вы можете использовать Trigger для решения этой проблемы.

<DataTemplate.Triggers>
    <DataTrigger Binding="{Binding RelativeSource={RelativeSource PreviousData}}" Value="{x:Null}">
        <Setter TargetName="myTargetElement" Property="SomeProperty" Value="SomeValue"/>
    </DataTrigger>
</DataTemplate.Triggers>

Этот подход позволит вам настроить свойства в DataTemplate для первого элемента.

Если вы хотитеПримените уникальные стили к каждой кнопке. Похоже, что вам может потребоваться захватить больше информации в ваших моделях представления элемента кнопки.

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

0 голосов
/ 19 сентября 2018

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

<Button Margin="2,0,0,2"
        Content="{Binding Name}"
        CommandParameter="{Binding}"
        Style="{StaticResource ButtonStyle}"
        Command="{Binding DataContext.SelectedPercentageCommand, 
                  RelativeSource={RelativeSource FindAncestor, 
                                  AncestorType={x:Type UserControl}}}" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...