2014-03-01 5 views
4

헤더가있는 다중 열 콤보 상자를 정의하기 위해 this 질문에 대한 대답을 받아 들였습니다.리소스 사전에 헤더가있는 여러 항목 콤보 상자?

나를 위해 잘 작동하지 않아서 몇 가지 사항을 변경했으나 이제는 작동합니다. 다음은 헤더가있는 다중 열 콤보 상자를 만드는 xaml입니다. 이제

<Page.DataContext> 
     <vm:ItemsViewModel /> 
    </Page.DataContext> 

    <Page.Resources> 
     <CollectionViewSource x:Key="UnitsCollection" Source="{Binding Units}" /> 
    </Page.Resources> 

    <ComboBox Grid.Row="0" Grid.Column="4" Grid.ColumnSpan="2" Grid.IsSharedSizeScope="True" 
       x:Name="cbUnits" ItemsSource="{DynamicResource Items}" IsEditable="True" TextSearch.TextPath="Symbol" 
       SelectedValue="{Binding SelectedUnit}" SelectedValuePath="UnitID"> 
     <ComboBox.Resources> 
      <CompositeCollection x:Key="Items"> 
       <ComboBoxItem IsEnabled="False"> 
        <Grid TextElement.FontWeight="Bold"> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition SharedSizeGroup="A" /> 
          <ColumnDefinition Width="50" /> 
          <ColumnDefinition SharedSizeGroup="B" /> 
         </Grid.ColumnDefinitions> 
         <Grid.Children> 
          <TextBlock Grid.Column="0" Text="Name" /> 
          <TextBlock Grid.Column="2" Text="Symbol" /> 
         </Grid.Children> 
        </Grid> 
       </ComboBoxItem> 
       <Separator /> 
       <CollectionContainer Collection="{Binding Source={StaticResource UnitsCollection}}" /> 
      </CompositeCollection> 

      <DataTemplate DataType="{x:Type models:Unit}"> 
       <Grid> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition SharedSizeGroup="A" /> 
         <ColumnDefinition Width="50" /> 
         <ColumnDefinition SharedSizeGroup="B" /> 
        </Grid.ColumnDefinitions> 
        <Grid.Children> 
         <TextBlock Grid.Column="0" Text="{Binding Name}" /> 
         <TextBlock Grid.Column="2" Text="{Binding Symbol}" /> 
        </Grid.Children> 
       </Grid> 
      </DataTemplate> 
     </ComboBox.Resources> 
    </ComboBox> 

</Page> 

, 나는 또 다시 작성할 필요가 없습니다 것이다 그래야, 리소스 사전에 <ComboBox.Resources> 사이의 섹션을 정의하고 싶습니다. 두 열 콤보이 사용할 수 있도록, 열 - 이름과 열 값이 어떻게 든 뭔가에 (나도 몰라)

  1. 바인딩 : 나는 또한 리소스 사전에 두 가지 이상의 기능을 추가 할 자원 사전.

  2. 가능하면 리소스 사전에 몇 가지 논리를 추가하여 원하는 수의 열이있는 모든 콤보 박스에 동일한 리소스 사전을 사용할 수 있습니다.

나는 누군가가 올바른 방향으로 나를 안내 할 수 있다고 생각 누군가가 과거에이 일을했는지 ​​나는이 질문을 또 다른 긴장을하다 몇 가지 도움을 얻을 수 있습니다.

위의 질문에 xaml 만 사용하여 해결되지 않은 경우 솔루션을 기꺼이 받아들입니다.

+0

하면, 예를 들어 값을 받아들이는 사용자 제어를 만들어야 열 번호, 헤더 등 – Herdo

답변

2

시도해보십시오. 도움이 될 수도 있습니다. 방금 combobox 스타일을 수정했습니다.이 코드를 별도로 실행하십시오.

당신이 콤보 상자 datatempalate 여러 없단가 자원에 작성하지 않은 사용할 수 있습니다 also..so 당신은 자원이 콤보 상자 DataTemplate을 쓸 수

<Window.Resources> 
    <!--header text--> 
    <TextBlock x:Key="header1" Text="Index"></TextBlock> 
    <TextBlock x:Key="header2" Text="Name"></TextBlock> 
    <TextBlock x:Key="header3" Text="Symbol"></TextBlock> 

    <!--Toggle Button Template--> 
    <ControlTemplate x:Key="ComboBoxToggleButton" TargetType="ToggleButton"> 
     <Grid x:Name="gd"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition /> 
       <ColumnDefinition Width="30" /> 
      </Grid.ColumnDefinitions> 
      <Border x:Name="Border" SnapsToDevicePixels="True" Grid.ColumnSpan="2" Background="White" BorderBrush="LightGray" BorderThickness="1"/> 
      <Border x:Name="Boredr1" SnapsToDevicePixels="True" Grid.Column="0" Margin="1" Background="White" BorderBrush="LightGray" BorderThickness="0,0,1,0" /> 
      <Path x:Name="Arrow" SnapsToDevicePixels="True" Grid.Column="1" Fill="Black" HorizontalAlignment="Center" VerticalAlignment="Center" Data="M 0 0 L 6 6 L 12 0 Z"/> 
      <ContentPresenter Grid.Column="0" TextElement.Foreground="Orange"></ContentPresenter> 
     </Grid> 
     <ControlTemplate.Triggers> 
      <Trigger Property="ToggleButton.IsMouseOver" Value="True"> 
       <Setter TargetName="Border" Property="BorderBrush" Value="Black"/> 
       <Setter TargetName="Boredr1" Property="BorderBrush" Value="Black"/> 
      </Trigger> 
      <Trigger Property="ToggleButton.IsChecked" Value="True"> 
       <Setter TargetName="Arrow" Property="Data" Value="M 0 0 L 5 5 L 10 0"/> 
       <Setter TargetName="Arrow" Property="Fill" Value="White"/> 
       <Setter TargetName="Arrow" Property="Stroke" Value="Black"/> 
       <Setter TargetName="Arrow" Property="StrokeThickness" Value="1.5"/> 
      </Trigger> 
      <Trigger Property="IsEnabled" Value="False"> 
       <Setter TargetName="gd" Property="Visibility" Value="Visible"/> 
      </Trigger> 
     </ControlTemplate.Triggers> 
    </ControlTemplate> 

    <!--TextBox Template--> 
    <ControlTemplate x:Key="ComboBoxTextBox" TargetType="TextBox"> 
     <ScrollViewer x:Name="PART_ContentHost" Focusable="False" /> 
    </ControlTemplate> 

    <!--2 column combobox--> 
    <Style x:Key="2_Column_Cmb" TargetType="ComboBox"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ComboBox"> 
        <Grid> 
         <ToggleButton Name="ToggleButton" Foreground="Black" Template="{StaticResource ComboBoxToggleButton}" Focusable="false" IsChecked="{Binding Path=IsDropDownOpen,Mode=TwoWay,RelativeSource={RelativeSource TemplatedParent}}" ClickMode="Press"> 
         </ToggleButton> 
         <ContentPresenter Name="ContentSite" IsHitTestVisible="False" Content="{TemplateBinding SelectionBoxItem}" ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}" ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}" Margin="3,3,23,3" VerticalAlignment="Center" HorizontalAlignment="Left" /> 
         <TextBox OverridesDefaultStyle="True" SelectionBrush="Gray" CaretBrush="Black" Margin="0,0,30,0" TextWrapping="NoWrap" x:Name="PART_EditableTextBox" FontFamily="Segoe UI Dark" Foreground="Black" Style="{x:Null}" Template="{StaticResource ComboBoxTextBox}" HorizontalAlignment="Left" Focusable="True" VerticalAlignment="Center" FontSize="15" Visibility="Hidden" IsReadOnly="{TemplateBinding IsReadOnly}"/> 
         <Popup Name="Popup" Grid.ColumnSpan="2" Placement="Bottom" IsOpen="{TemplateBinding IsDropDownOpen}" AllowsTransparency="True" Focusable="False" PopupAnimation="Slide"> 
          <Grid Name="DropDown" SnapsToDevicePixels="True" MaxWidth="{TemplateBinding ActualWidth}" MinWidth="{TemplateBinding ActualWidth}" MaxHeight="{TemplateBinding MaxDropDownHeight}"> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition></ColumnDefinition> 
            <ColumnDefinition></ColumnDefinition> 
           </Grid.ColumnDefinitions> 
           <Grid.RowDefinitions> 
            <RowDefinition Height="30"></RowDefinition> 
            <RowDefinition Height="Auto"></RowDefinition> 
           </Grid.RowDefinitions> 
           <Grid Background="LightGray" Grid.Row="0" Grid.Column="0"> 
            <TextBlock Text="{Binding Source={StaticResource header2},Path=Text}" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="Black" FontFamily="Segoe Ui Dark" FontSize="15" ></TextBlock> 
           </Grid> 
           <Grid Background="LightGray" Grid.Row="0" Grid.Column="1"> 
            <TextBlock Text="{Binding Source={StaticResource header3},Path=Text}" Background="LightGray" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="Black" FontFamily="Segoe Ui Dark" FontSize="15"></TextBlock> 
           </Grid> 
           <Border Grid.ColumnSpan="2" Grid.RowSpan="2" x:Name="DropDownBorder" SnapsToDevicePixels="True" Background="Transparent" MaxWidth="{TemplateBinding ActualWidth}" BorderThickness="1" BorderBrush="LightGray"/> 
           <ScrollViewer Grid.ColumnSpan="2" ScrollViewer.CanContentScroll="False" Grid.Row="1" SnapsToDevicePixels="True"> 
            <StackPanel IsItemsHost="True" Background="Transparent"> 
            </StackPanel> 
           </ScrollViewer> 
          </Grid> 
         </Popup> 
        </Grid> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsEditable" Value="true"> 
          <Setter Property="IsTabStop" Value="false"/> 
          <Setter TargetName="PART_EditableTextBox" Property="Background" Value="White"/> 
          <Setter TargetName="PART_EditableTextBox" Property="Visibility" Value="Visible"/> 
          <Setter TargetName="PART_EditableTextBox" Property="Foreground" Value="Black"/> 
          <Setter TargetName="ContentSite" Property="Visibility" Value="Hidden"/> 
         </Trigger> 
         <Trigger Property="HasItems" Value="false"> 
          <Setter TargetName="DropDownBorder" Property="MinHeight" Value="95"/> 
         </Trigger> 
         <Trigger Property="IsEnabled" Value="false"> 
          <Setter Property="IsTabStop" Value="false"/> 
          <Setter TargetName="PART_EditableTextBox" Property="Visibility" Value="Visible"/> 
          <Setter TargetName="PART_EditableTextBox" Property="Foreground" Value="Black"/> 
          <Setter TargetName="PART_EditableTextBox" Property="IsEnabled" Value="False"/> 
          <Setter TargetName="PART_EditableTextBox" Property="Background" Value="White"/> 
          <Setter TargetName="ContentSite" Property="Visibility" Value="Hidden"/> 
         </Trigger> 
         <Trigger Property="IsGrouping" Value="true"> 
          <Setter Property="ScrollViewer.CanContentScroll" Value="false"/> 
         </Trigger> 
         <Trigger SourceName="Popup" Property="Popup.AllowsTransparency" Value="true"> 
          <Setter TargetName="DropDownBorder" Property="Margin" Value="0,2,0,0"/> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
     <Style.Triggers> 
     </Style.Triggers> 
    </Style> 

    <!--3 column combobox--> 
    <Style x:Key="3_Column_Cmb" TargetType="ComboBox"> 
     <Setter Property="SnapsToDevicePixels" Value="true"/> 
     <Setter Property="OverridesDefaultStyle" Value="true"/> 
     <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/> 
     <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Disabled"/> 
     <Setter Property="Height" Value="40"/> 
     <Setter Property="MinWidth" Value="120"/> 
     <Setter Property="MinHeight" Value="20"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ComboBox"> 
        <Grid> 
         <ToggleButton Name="ToggleButton" Foreground="Black" Template="{StaticResource ComboBoxToggleButton}" Focusable="false" IsChecked="{Binding Path=IsDropDownOpen,Mode=TwoWay,RelativeSource={RelativeSource TemplatedParent}}" ClickMode="Press"> 
         </ToggleButton> 
         <ContentPresenter Name="ContentSite" IsHitTestVisible="False" Content="{TemplateBinding SelectionBoxItem}" ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}" ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}" Margin="3,3,23,3" VerticalAlignment="Center" HorizontalAlignment="Left" /> 
         <TextBox OverridesDefaultStyle="True" SelectionBrush="Gray" CaretBrush="Black" Margin="0,0,30,0" TextWrapping="NoWrap" x:Name="PART_EditableTextBox" FontFamily="Segoe UI Dark" Foreground="Black" Style="{x:Null}" Template="{StaticResource ComboBoxTextBox}" HorizontalAlignment="Left" Focusable="True" VerticalAlignment="Center" FontSize="15" Visibility="Hidden" IsReadOnly="{TemplateBinding IsReadOnly}"/> 
         <Popup Name="Popup" Grid.ColumnSpan="2" Placement="Bottom" IsOpen="{TemplateBinding IsDropDownOpen}" AllowsTransparency="True" Focusable="False" PopupAnimation="Slide"> 
          <ContentControl Name="DropDown" SnapsToDevicePixels="True" MaxWidth="{TemplateBinding ActualWidth}" MinWidth="{TemplateBinding ActualWidth}" MaxHeight="{TemplateBinding MaxDropDownHeight}"> 
           <Grid> 
            <Grid.ColumnDefinitions> 
             <ColumnDefinition></ColumnDefinition> 
             <ColumnDefinition></ColumnDefinition> 
             <ColumnDefinition></ColumnDefinition> 
            </Grid.ColumnDefinitions> 
            <Grid.RowDefinitions> 
             <RowDefinition Height="30"></RowDefinition> 
             <RowDefinition Height="Auto"></RowDefinition> 
            </Grid.RowDefinitions> 
            <Grid Background="LightGray" Grid.Row="0" Grid.Column="0"> 
             <TextBlock Text="{Binding Source={StaticResource header1},Path=Text}" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="Black" FontFamily="Segoe Ui Dark" FontSize="15" ></TextBlock> 
            </Grid> 
            <Grid Background="LightGray" Grid.Row="0" Grid.Column="1"> 
             <TextBlock Text="{Binding Source={StaticResource header2},Path=Text}" Background="LightGray" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="Black" FontFamily="Segoe Ui Dark" FontSize="15"></TextBlock> 
            </Grid> 
            <Grid Background="LightGray" Grid.Row="0" Grid.Column="2"> 
             <TextBlock Text="{Binding Source={StaticResource header3},Path=Text}" Background="LightGray" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="Black" FontFamily="Segoe Ui Dark" FontSize="15"></TextBlock> 
            </Grid> 
            <Border Grid.ColumnSpan="3" Grid.RowSpan="2" x:Name="DropDownBorder" SnapsToDevicePixels="True" Background="Transparent" MaxWidth="{TemplateBinding ActualWidth}" BorderThickness="1" BorderBrush="LightGray"/> 
            <ScrollViewer Grid.ColumnSpan="3" ScrollViewer.CanContentScroll="False" Grid.Row="1" Margin="0,0,0,0" SnapsToDevicePixels="True"> 
             <StackPanel IsItemsHost="True" Background="Transparent"> 
             </StackPanel> 
            </ScrollViewer> 
           </Grid> 
          </ContentControl> 
         </Popup> 
        </Grid> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsEditable" Value="true"> 
          <Setter Property="IsTabStop" Value="false"/> 
          <Setter TargetName="PART_EditableTextBox" Property="Background" Value="White"/> 
          <Setter TargetName="PART_EditableTextBox" Property="Visibility" Value="Visible"/> 
          <Setter TargetName="PART_EditableTextBox" Property="Foreground" Value="Black"/> 
          <Setter TargetName="ContentSite" Property="Visibility" Value="Hidden"/> 
         </Trigger> 
         <Trigger Property="HasItems" Value="false"> 
          <Setter TargetName="DropDownBorder" Property="MinHeight" Value="95"/> 
         </Trigger> 
         <Trigger Property="IsEnabled" Value="false"> 
          <Setter Property="IsTabStop" Value="false"/> 
          <Setter TargetName="PART_EditableTextBox" Property="Visibility" Value="Visible"/> 
          <Setter TargetName="PART_EditableTextBox" Property="Foreground" Value="Black"/> 
          <Setter TargetName="PART_EditableTextBox" Property="IsEnabled" Value="False"/> 
          <Setter TargetName="PART_EditableTextBox" Property="Background" Value="White"/> 
          <Setter TargetName="ContentSite" Property="Visibility" Value="Hidden"/> 
         </Trigger> 
         <Trigger Property="IsGrouping" Value="true"> 
          <Setter Property="ScrollViewer.CanContentScroll" Value="false"/> 
         </Trigger> 
         <Trigger SourceName="Popup" Property="Popup.AllowsTransparency" Value="true"> 
          <Setter TargetName="DropDownBorder" Property="Margin" Value="0,2,0,0"/> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
     <Style.Triggers> 
     </Style.Triggers> 
    </Style> 

    <!--combobox item style--> 
    <Style x:Key="Column_CmbItem" TargetType="ComboBoxItem"> 
     <Setter Property="SnapsToDevicePixels" Value="True"/> 
     <Setter Property="OverridesDefaultStyle" Value="True"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ComboBoxItem"> 
        <Grid x:Name="Border" Grid.ColumnSpan="2" Margin="1,0,1,1" Background="White"> 
         <ContentPresenter></ContentPresenter> 
        </Grid> 
        <ControlTemplate.Triggers> 
         <Trigger Property="ComboBoxItem.IsSelected" Value="True"> 
          <Setter TargetName="Border" Property="Background" Value="Gray"></Setter> 
         </Trigger> 
         <Trigger Property="ComboBoxItem.IsMouseOver" Value="True"> 
          <Setter TargetName="Border" Property="Background" Value="LightBlue"></Setter> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

</Window.Resources> 

XAML 코드입니다.

InitializeComponent(); 
    List<ComboboxData> cmb = new List<ComboboxData>(); 
    cmb.Add(new ComboboxData("1.","Tidle", "~")); 
    cmb.Add(new ComboboxData("2.", "Exclamation", "!")); 
    cmb.Add(new ComboboxData("3.", "Ampersat", "@"));   
    cmb.Add(new ComboboxData("4.","Ampersand", "&")); 
    cmb.Add(new ComboboxData("5.","Dollar", "$")); 
    Combobox.ItemsSource = cmb; 
    Combobox1.ItemsSource = cmb; 

public class ComboboxData 
{ 
    public string index { get; set; } 
    public string name { get; set; } 
    public string symbol { get; set; } 
    public ComboboxData(string index,string name,string symbol) 
    { 
     this.index = index; 
     this.name = name; 
     this.symbol = symbol; 
    } 
} 

<Grid> 
    <ComboBox x:Name="Combobox" Margin="50,0,0,0" IsEditable="True" HorizontalAlignment="Left" IsTextSearchEnabled="True" TextSearch.TextPath="symbol" ItemsSource="{Binding cmb }" Style="{StaticResource 2_Column_Cmb}" Height="30" ItemContainerStyle="{StaticResource Column_CmbItem}" Width="200" Tag="Item1"> 
     <ComboBox.ItemTemplate> 
      <DataTemplate> 
       <Grid Background="Transparent" SnapsToDevicePixels="True"> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition></ColumnDefinition> 
         <ColumnDefinition></ColumnDefinition> 
        </Grid.ColumnDefinitions> 
        <TextBlock Text="{Binding name}" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="0" FontSize="15" TextTrimming="CharacterEllipsis" Foreground="Black" /> 
        <TextBlock Text="{Binding symbol}" Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="20" Foreground="Black"/> 
       </Grid> 
      </DataTemplate> 
     </ComboBox.ItemTemplate> 
    </ComboBox> 

    <ComboBox x:Name="Combobox1" Margin="0,0,50,0" HorizontalAlignment="Right" IsEditable="True" IsTextSearchEnabled="True" TextSearch.TextPath="symbol" ItemsSource="{Binding cmb }" Style="{StaticResource 3_Column_Cmb}" Height="30" ItemContainerStyle="{StaticResource Column_CmbItem}" Width="200" Tag="Item1"> 
     <ComboBox.ItemTemplate> 
      <DataTemplate> 
       <Grid Background="Transparent" SnapsToDevicePixels="True"> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition></ColumnDefinition> 
         <ColumnDefinition></ColumnDefinition> 
         <ColumnDefinition></ColumnDefinition> 
        </Grid.ColumnDefinitions> 
        <TextBlock Text="{Binding index}" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="0" FontSize="15" TextTrimming="CharacterEllipsis" Foreground="Black" /> 
        <TextBlock Text="{Binding name}" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="1" FontSize="15" TextTrimming="CharacterEllipsis" Foreground="Black" /> 
        <TextBlock Text="{Binding symbol}" Grid.Column="2" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="20" Foreground="Black"/> 
       </Grid> 
      </DataTemplate> 
     </ComboBox.ItemTemplate> 
    </ComboBox> 
</Grid> 

C# 코드는 유사 당신은 5 열에도 4 열, 대한 템플릿을 편집 할 수 있습니다.

출력

필요한 확장 된 기능성

enter image description here

+0

정확히 내가 찾고 있었던 것이 었습니다. 당신의 위대한 노력에 감사드립니다. Jai Maharashtra. – Vishal

+0

ho Jai Maharahstra. –