2012-03-19 88 views
2

我需要創建一個包含組合框的自定義控件,該組合框的彈出框將綁定對象的名稱原型與左側對齊,並且綁定對象的CreatedDate屬性與每個彈出框中的右側對齊up item。 Name和CreatedDate也不能重疊。對象的名稱是可變長度在彈出框中有兩列的組合框

我試着解決這個問題,在Combobox.ItemTemplate中使用DataTemplate,在數據模板中我有一個兩列對齊的網格。 Grid的水平對齊設置爲Stretch,但由於某些原因,Grid不填充彈出窗口中的可用空間。有誰知道如何解決這個問題,爲什麼會發生?我正在使用WPF 3.5。

<UserControl.Resources> 
    <CollectionViewSource x:Key="cvsProcessingSessionList" Source="{Binding ProcessingSessionList, ElementName=View}"/> 
    <Style TargetType="{x:Type ComboBox}" 
      BasedOn="{StaticResource {x:Static res:ObjectResources.LEComboBoxStyle}}"> 
     <Setter Property="Margin" Value="5,3"/> 
     <Setter Property="HorizontalAlignment" Value="Stretch"/> 
     <Setter Property="VerticalAlignment" Value="Center"/>    
    </Style> 
</UserControl.Resources> 

<GroupBox x:Name="grbProcessingSession"> 
    <GroupBox.Header> 
     <Bold>Processing Session:</Bold> 
    </GroupBox.Header> 
    <GroupBox.Content> 
     <ComboBox 
        x:Name="ccbProcessingSessionName" 
        ItemsSource="{Binding Source={StaticResource cvsProcessingSessionList}}" 
        Loaded="OnLoaded" TextSearch.TextPath="Name" 
        IsEditable="True" MaxDropDownHeight="500" > 
      <ComboBox.ItemTemplate> 
       <DataTemplate> 
        <Grid Background="Pink" HorizontalAlignment="Stretch" > 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="*" /> 
          <ColumnDefinition Width="100" /> 
         </Grid.ColumnDefinitions> 

         <TextBlock Grid.Column="0" TextAlignment="Left" HorizontalAlignment="Left" 
            Margin="0,0,5,0" Text="{Binding Name}"/> 
         <TextBlock Grid.Column="1" TextAlignment="Right" HorizontalAlignment="Right" 
            Text="{Binding CreatedDate, StringFormat=dd/MM/yyyy}"/> 
        </Grid> 
       </DataTemplate> 
      </ComboBox.ItemTemplate> 
     </ComboBox> 
    </GroupBox.Content> 
</GroupBox> 

回答

4

只需添加這綁定到您的網格yiour DataTemplate ...

Width="{Binding ActualWidth, 
        RelativeSource={RelativeSource FindAncestor, 
          AncestorType={x:Type ComboBoxItem}}, 
        Mode=OneTime}" 

也爲更好的功效,適用於背景色的ComboBoxItem而不是電網.. 。

<ComboBox.ItemContainerStyle> 
     <Style TargetType="{x:Type ComboBoxItem}"> 
      <Setter Property="Background" Value="Pink"/> 
     </Style> 
</ComboBox.ItemContainerStyle> 
+0

工作!非常感謝。我們嘗試了類似的方法,但是我們沒有Mode = OneTime部分,但它不起作用。事實上,刪除使得彈出寬度與屏幕一樣寬。僅應用背景顏色才能看到網格。 – 2012-03-19 23:20:59

+0

很高興我能幫到你。如果可能的話,請將此標記爲答案! – 2012-03-20 04:59:58

+0

一旦我的聲望達到15,我肯定會標記它 – 2012-03-20 22:55:32

1

每當我想要做同樣的事情,你問我補充說:

<ComboBox ...> 
     <ComboBoxItem HorizontalContentAlignment="Stretch"> 
     </ComboBoxItem> 
</ComboBox> 

問題是我將自定義DataTemplate放在ComboBoxItem中。 也許你應該嘗試一下...

0

其實,最好的辦法是設置HorizontalContentAlignment="Stretch"ComboBox的水平。即使ComboBox的寬度發生變化(例如,如果它位於可調整大小的容器中),這也將起作用。

但是,請注意,這適用於WPF和Silverlight 5,但不適用於某些較舊版本的Silverlight。