2010-04-21 55 views
0

我正在爲我的應用程序使用其中一個已定義的wpf主題,所以我的所有控件都會根據該主題自動彈出。如何在使用預定義模板時更改listboxitem的邊框

現在我正在填充項目(usercontrols)的列表框,但並不是所有的項目都應該可見。但是當我將height設置爲0(usercontrol)或設置爲不可見時,我會得到listboxitems的一個粗灰色邊框。

有人可以幫我重寫listboxitem的邊框,或者告訴我模板中哪裏需要更改邊框,因爲我找不到它。

這是模板的ListBoxItem中的一部分:

<Style d:IsControlPart="True" TargetType="{x:Type ListBoxItem}"> 
    <Setter Property="SnapsToDevicePixels" Value="true"/> 
    <Setter Property="OverridesDefaultStyle" Value="false"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ListBoxItem}"> 
       <ControlTemplate.Resources> 
        <Storyboard x:Key="HoverOn"> 
         <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="HoverRectangle" Storyboard.TargetProperty="(UIElement.Opacity)"> 
          <SplineDoubleKeyFrame KeyTime="00:00:00.2000000" Value="1"/> 
         </DoubleAnimationUsingKeyFrames> 
        </Storyboard> 
        <Storyboard x:Key="HoverOff"> 
         <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="HoverRectangle" Storyboard.TargetProperty="(UIElement.Opacity)"> 
          <SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="0" /> 
         </DoubleAnimationUsingKeyFrames> 
        </Storyboard> 
        <Storyboard x:Key="SelectedOn"> 
         <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="SelectedRectangle" Storyboard.TargetProperty="(UIElement.Opacity)"> 
          <SplineDoubleKeyFrame KeyTime="00:00:00.2000000" Value="1"/> 
         </DoubleAnimationUsingKeyFrames> 
        </Storyboard> 
        <Storyboard x:Key="SelectedOff"> 
         <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="SelectedRectangle" Storyboard.TargetProperty="(UIElement.Opacity)"> 
          <SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="0" /> 
         </DoubleAnimationUsingKeyFrames> 
        </Storyboard> 
       </ControlTemplate.Resources> 
       <Grid Background="{TemplateBinding Background}" 
        Margin="1,1,1,1" SnapsToDevicePixels="true" x:Name="grid"> 
        <Rectangle x:Name="Background" 
         IsHitTestVisible="False" 
         Fill="{StaticResource SelectedBackgroundBrush}" 
         RadiusX="0"/> 
        <Rectangle x:Name="SelectedRectangle" 
         IsHitTestVisible="False" 
         Opacity="0" 
         Fill="{StaticResource NormalBrush}" 
         RadiusX="0"/> 
        <Rectangle x:Name="HoverRectangle" 
         IsHitTestVisible="False" 
         Fill="{StaticResource HoverBrush}" 
         RadiusX="0" 
         Opacity="0"/> 
        <ContentPresenter Margin="5,3,3,3" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" x:Name="contentPresenter"/> 
       </Grid> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsMouseOver" Value="true"> 
         <Trigger.EnterActions> 
          <BeginStoryboard Storyboard="{StaticResource HoverOn}"/> 
         </Trigger.EnterActions> 
         <Trigger.ExitActions> 
          <BeginStoryboard Storyboard="{StaticResource HoverOff}"/> 
         </Trigger.ExitActions> 
        </Trigger> 
        <Trigger Property="IsSelected" Value="true"> 
         <Trigger.EnterActions> 
          <BeginStoryboard Storyboard="{StaticResource SelectedOn}"/> 
         </Trigger.EnterActions> 
         <Trigger.ExitActions> 
          <BeginStoryboard Storyboard="{StaticResource SelectedOff}"/> 
         </Trigger.ExitActions> 
        </Trigger> 

        <Trigger Property="IsEnabled" Value="false"> 
         <Setter Property="Foreground" Value="{DynamicResource DisabledForegroundBrush}"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="Foreground" Value="{DynamicResource TextBrush}"/> 
</Style> 

回答

0

好吧,我想我設法解決它。

我需要隱藏項目的原因是因爲更新後,它們可能會顯示給用戶,而不是重新填充列表框並再次詢問電話中心。

我發現這不是我需要設置的邊框。灰色邊框看起來好像是由邊框屬性設置的,但它確實只是因爲設置了邊距而顯示的背景。

<ContentPresenter Margin="5,3,3,3" /> 

重置此邊距解決了我的問題。

無論如何感謝您的努力。

0

儘管不知道隱藏一些ListBoxItems的目的,我可以給使用一個ListBoxItem的了borderThickness或BorderBrush財產的想法。

<Setter Property="BorderThickness" Value="0" /> 

但是,如果你更好地解釋你的情況,我可以在設計上提出一些建議。

相關問題