2010-05-20 97 views
3

我在資源字典中爲listboxitem定義了一種樣式。我想在列表框的cs文件中使用這種樣式:使用資源字典中定義的樣式:

我正在做下面的事情,但它給了我null,CustomListBoxItemStyle是給予樣式的關鍵字的名稱。

public class CustomListBox : ListBox 
{ 
    public CustomListBox() 
    { 
     this.ItemContainerStyle = Application.Current.Resources["CustomListBoxItemStyle"] as Style; 
    } 
} 

這裏沒有xaml。

如何實現這一目標?

+0

它可能是值得您快速閱讀Stackoverflow使用的降價語言文檔。當你寫一個問題時,右邊有一個有用的簡介。 – AnthonyWJones 2010-05-20 10:26:43

回答

0

好吧,我幾乎嘗試了所有的事情,但沒有辦法擺脫得到this.ItemContainerStyle = null

這樣的 - :你需要它包括在App.xaml中這樣它不會自動發生我改變了做的方式,而是將ItemContainerStyle設置在從Listbox繼承的customlistbox.cs中。我從那裏刪除它。

然後我在那裏使用,這是一個用戶控件,所以有axaml它:)礦自定義列表框,因此,我在usercontrol.resource定義我ItemContainerStyle如下圖所示:

<UserControl.Resources> 
     <Style x:Key="CustomListBoxItemStyle" TargetType="ChargeEntry:CustomListBoxItem"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="ChargeEntry:CustomListBoxItem"> 
         <Grid Background="{TemplateBinding Background}"> 
          <VisualStateManager.VisualStateGroups> 
           <VisualStateGroup x:Name="CommonStates"> 
            <VisualState x:Name="Normal"/> 
            <VisualState x:Name="MouseOver"> 
             <Storyboard> 
              <DoubleAnimation Duration="0" To=".35" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="fillColor"/> 
             </Storyboard> 
            </VisualState> 
            <VisualState x:Name="Disabled"> 
             <Storyboard> 
              <DoubleAnimation Duration="0" To=".55" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="contentPresenter"/> 
             </Storyboard> 
            </VisualState> 
           </VisualStateGroup> 
           <VisualStateGroup x:Name="SelectionStates"> 
            <VisualState x:Name="Unselected"/> 
            <VisualState x:Name="Selected"> 
             <Storyboard> 
              <DoubleAnimation Duration="0" To=".75" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="fillColor2"/> 
             </Storyboard> 
            </VisualState> 
           </VisualStateGroup> 
           <VisualStateGroup x:Name="FocusStates"> 
            <VisualState x:Name="Focused"> 
             <Storyboard> 
              <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetProperty="Visibility" Storyboard.TargetName="FocusVisualElement"> 
               <DiscreteObjectKeyFrame KeyTime="0"> 
                <DiscreteObjectKeyFrame.Value> 
                 <Visibility>Visible</Visibility> 
                </DiscreteObjectKeyFrame.Value> 
               </DiscreteObjectKeyFrame> 
              </ObjectAnimationUsingKeyFrames> 
             </Storyboard> 
            </VisualState> 
            <VisualState x:Name="Unfocused"/> 
           </VisualStateGroup> 
          </VisualStateManager.VisualStateGroups> 
          <Grid HorizontalAlignment="Stretch"> 
           <TextBlock x:Name="txtName" /> 
          </Grid> 
          <Rectangle x:Name="fillColor" Fill="#FFBADDE9" IsHitTestVisible="False" Opacity="0" RadiusY="1" RadiusX="1"/> 
          <Rectangle x:Name="fillColor2" Fill="#FFBADDE9" IsHitTestVisible="False" Opacity="0" RadiusY="1" RadiusX="1"/> 
          <ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}"/> 
          <Rectangle x:Name="FocusVisualElement" RadiusY="1" RadiusX="1" Stroke="#FF6DBDD1" StrokeThickness="1" Visibility="Collapsed"/> 
         </Grid> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 

    </UserControl.Resources> 

,然後用於它自定義列表框只在usercontrol裏面定義..

<CustomListBox x:Name="lstComboBoxResult" ItemContainerStyle="{StaticResource CustomListBoxItemStyle}" /> 
1

我在資源字典中爲listboxitem定義了一種樣式。

但是該資源字典合併到應用程序的資源字典中。

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="MyResourceDictionary.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
     <!-- other resource defined directly in app xaml --> 
    </ResourceDictionary> 
</Application.Resources> 
+0

好吧,所以我必須添加一個應用程序xaml到我的項目。 – Malcolm 2010-05-20 10:42:04

+0

@AnthonyWJones我跟着它,但它不工作,它仍然產生空。 – Malcolm 2010-05-20 10:58:05

+0

@Malcolm:呃,您必須「將應用程序添加到我的項目中」這一事實表明事情已經有點混亂了。你應該已經有一個App.xaml和一個App.xaml.cs,它的App.xaml.cs有'Application_Startup'等。它的'App'類派生自Application和它的'App'類'InitializeComponent ''將'ResourceDictionary'分配給'Application.Resources'屬性的方法。 – AnthonyWJones 2010-05-20 11:31:50

相關問題