2016-03-15 7 views
1

Хотелось бы добавить стиль к кнопке и не понимаю, почему я должен включать эту строку кода, где я не хочу добавлять какую-либо границу к моей кнопке:Удалить поле пробела вокруг ListViewItem

<Border Background="{TemplateBinding Background}"> 

Полный код:

<Style x:Key="ButtonStyleRed" TargetType="{x:Type Button}"> 
    <Setter Property="OverridesDefaultStyle" Value="True"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Button}"> 
       <Border Background="{TemplateBinding Background}"> 
        <StackPanel Orientation="Horizontal" Width="200"> 
         <Rectangle Width="4" Height="30" Fill="#64dd17" Margin="0,0,10,1" RadiusX="2" RadiusY="2"/> 
         <TextBlock Text="{Binding Path=DataContext.FlowStageName,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Button}}}" 
            VerticalAlignment="Center" FontSize="14" Foreground="White" TextWrapping="WrapWithOverflow"/> 
        </StackPanel> 
       </Border> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsFocused" Value="True"/> 
        <Trigger Property="IsDefaulted" Value="True"/> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter Property="Background" Value="#263238"></Setter> 
        </Trigger> 
        <Trigger Property="IsPressed" Value="True"/> 
        <Trigger Property="IsEnabled" Value="False"/> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="HorizontalAlignment" Value="Left"/> 
    <Setter Property="Margin" Value="0"/> 
    <Setter Property="Padding" Value="0"></Setter> 
    <Setter Property="Width" Value="200"/> 
    <Setter Property="Height" Value="50"/> 
    <Setter Property="Background" Value="#37474f"/> 
    <Setter Property="BorderThickness" Value="0"/> 
</Style> 

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

Когда у меня нет этой границы, свойство Setter Property for Background также не работает.

EDIT Когда я меняю его ниже, он оставляет меня с отступом/маркой вокруг кнопки. Я установил Setters for Margin и Padding равным 0, но это не работает.

<StackPanel Orientation="Horizontal" Width="200" Background="{TemplateBinding Background}" Margin="{TemplateBinding Padding}"> 
         <Rectangle Width="4" Height="30" Fill="#64dd17" Margin="0,0,10,1" RadiusX="2" RadiusY="2"/> 
         <TextBlock Text="{Binding Path=DataContext.FlowStageName,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Button}}}" 
            VerticalAlignment="Center" FontSize="14" Foreground="White" TextWrapping="WrapWithOverflow"/> 
       </StackPanel> 

enter image description here

EDIT2

<views:BaseView.Resources> 
    <views:SwapBooleanValueConverter x:Key="SwapBooleanValueConverter" /> 
    <DataTemplate x:Key="FlowStagesTemplate"> 
     <StackPanel> 
      <Button x:Name="MenuStageButton" 
        Tag="{Binding ID}" 
        Command="{Binding DataContext.OnButtonClickCommand, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" 
        CommandParameter="{Binding ElementName=TurulStageButton}" 
        Style="{Binding FlowStageDisplayStyle}"> 
      </Button> 
      <Rectangle VerticalAlignment="Stretch" Width="200" Margin="0" Height="1"> 
       <Rectangle.Fill> 
        <LinearGradientBrush StartPoint="0,0" EndPoint="1,0" > 
         <GradientStop Color="#263238" Offset="0" /> 
         <GradientStop Color="#78909c" Offset="0.5" /> 
         <GradientStop Color="#263238" Offset="1.0" /> 
        </LinearGradientBrush> 
       </Rectangle.Fill> 
      </Rectangle> 
     </StackPanel> 
    </DataTemplate> 
</views:BaseView.Resources> 
<StackPanel Background="#263238"> 
    <ListView ItemsSource="{Binding FlowStagesSubMenu}" ItemTemplate="{StaticResource FlowStagesTemplate}" 
       BorderThickness="0" Background="#263238" ScrollViewer.HorizontalScrollBarVisibility="Disabled" > 
     <ListView.ItemsPanel> 
      <ItemsPanelTemplate> 
       <StackPanel Orientation="Vertical"/> 
      </ItemsPanelTemplate> 
     </ListView.ItemsPanel> 
    </ListView> 
</StackPanel> 
+1

Эта граница не имеет фактической границы, она используется для отображения фона здесь. Без него нет элемента, который берет эту задачу, поэтому нет фона. – icebat

+0

Но моя кнопка выглядит так, что внутри нее есть прокладка, поскольку фон не охватывает всю кнопку? – Whistler

ответ

1

Итак, имея, что TemplateBinding вы предоставляете объекта внутри шаблона, чтобы получить это свойство Background. Без него для вашего Setter ничего не существует. Вот почему Background не работает, потому что в этом нет ничего приемлемого.

Однако для этого вам не обязательно нужен Border. Вы также можете просто взять этот Background="{TemplateBinding Background}" и применить его непосредственно к своему StackPanel, так как он также имеет имеющееся Background имущество.

Ваши проблемы с заполнением и маржи - это одно и то же. У вас нет никого, где можно было бы принять Setters, которые вы указали. Таким образом, вы хотите заполнить и пометить, что вам нужно будет оставить свою границу и добавить TemplateBindings для этих свойств, или StackPanel atleast поддерживает Margin, чтобы вы могли пересечь два и создать «Padding»;

<StackPanel Margin="{TemplateBinding Padding}"..../>

За исключением, то цвет фона будет иметь пространство вокруг него, так как фон на объекте, который теперь также имеет запас. Имеют смысл? Сравните с шаблоном Button по умолчанию и обратите внимание на то, что отсутствует. В основном это правило. Если вы хотите установить его на фактическом уровне управления, например <Button Background="blah" Margin="Blah"..../>, то внутри этого шаблона должно быть доступно что-то внутри шаблона, который вы пытаетесь использовать. По крайней мере, пока вы все еще изучаете, как работает шаблон. Надеюсь это поможет.

Addendum;

Хорошо, так как мы выяснили, что Button на самом деле не ваша проблема, а родитель. Попробуйте это вместо этого.

<ListView ItemsSource="{Binding FlowStagesSubMenu}" 
      ItemTemplate="{StaticResource FlowStagesTemplate}" 
      BorderThickness="0" Background="#263238" 
      ScrollViewer.HorizontalScrollBarVisibility="Disabled" > 
    <ListView.ItemContainerStyle> 
     <Style TargetType="ListViewItem"> 
     <Setter Property="Padding" Value="0"/> 
     <Setter Property="Margin" Value="0"/> 
     <Setter Property="BorderThickness" Value="0"/> 
     </Style> 
    </ListView.ItemContainerStyle> 
    <ListView.ItemsPanel> 
     <ItemsPanelTemplate> 
     <StackPanel Orientation="Vertical"/> 
     </ItemsPanelTemplate> 
    </ListView.ItemsPanel> 
</ListView> 
+0

Спасибо за ответ, я думаю, что понимаю, почему, но все же не могу удалить эту рамку вокруг кнопки. Внесет изменения в вопрос через минуту – Whistler

+0

А, может быть, я неправильно понял, в чем проблема, может быть, просто изображение или что-то для визуализации проблемы? –

+0

Пример изображения – Whistler

Смежные вопросы