2013-03-20 2 views

ответ

1

Обычно имущественные IsDropDown эффекты всплывающего окна, я редактировал шаблон COMBOBOX так всплывающий и ToggleButton кто контролирует it- бы bined другого имущества -tag

<Style x:Key="ComboBoxStyle1" TargetType="{x:Type ComboBox}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type ComboBox}"> 
        <Grid x:Name="MainGrid" SnapsToDevicePixels="true"> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="*"/> 
          <ColumnDefinition MinWidth="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}" Width="0"/> 
         </Grid.ColumnDefinitions> 
         <Popup x:Name="PART_Popup" StaysOpen="True" AllowsTransparency="true" Grid.ColumnSpan="2" IsOpen="{Binding Tag, RelativeSource={RelativeSource TemplatedParent}}" Margin="1" PopupAnimation="{DynamicResource {x:Static SystemParameters.ComboBoxPopupAnimationKey}}" Placement="Bottom"> 
          <Microsoft_Windows_Themes:SystemDropShadowChrome x:Name="Shdw" Color="Transparent" MaxHeight="{TemplateBinding MaxDropDownHeight}" MinWidth="{Binding ActualWidth, ElementName=MainGrid}"> 
           <Border x:Name="DropDownBorder" BorderBrush="{DynamicResource {x:Static SystemColors.WindowFrameBrushKey}}" BorderThickness="1" Background="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"> 
            <ScrollViewer x:Name="DropDownScrollViewer"> 
             <Grid RenderOptions.ClearTypeHint="Enabled"> 
              <Canvas HorizontalAlignment="Left" Height="0" VerticalAlignment="Top" Width="0"> 
               <Rectangle x:Name="OpaqueRect" Fill="{Binding Background, ElementName=DropDownBorder}" Height="{Binding ActualHeight, ElementName=DropDownBorder}" Width="{Binding ActualWidth, ElementName=DropDownBorder}"/> 
              </Canvas> 
              <ItemsPresenter x:Name="ItemsPresenter" KeyboardNavigation.DirectionalNavigation="Contained" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
             </Grid> 
            </ScrollViewer> 
           </Border> 
          </Microsoft_Windows_Themes:SystemDropShadowChrome> 
         </Popup> 
         <ToggleButton BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" Grid.ColumnSpan="2" IsChecked="{Binding Tag, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" Style="{StaticResource ComboBoxReadonlyToggleButton}"/> 
         <ContentPresenter ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}" ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}" Content="{TemplateBinding SelectionBoxItem}" ContentStringFormat="{TemplateBinding SelectionBoxItemStringFormat}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" IsHitTestVisible="false" Margin="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
        </Grid> 
        <ControlTemplate.Triggers> 
         <Trigger Property="HasDropShadow" SourceName="PART_Popup" Value="true"> 
          <Setter Property="Margin" TargetName="Shdw" Value="0,0,5,5"/> 
          <Setter Property="Color" TargetName="Shdw" Value="#71000000"/> 
         </Trigger> 
         <Trigger Property="HasItems" Value="false"> 
          <Setter Property="Height" TargetName="DropDownBorder" Value="95"/> 
         </Trigger> 
         <Trigger Property="IsEnabled" Value="false"> 
          <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> 
          <Setter Property="Background" Value="#FFF4F4F4"/> 
         </Trigger> 
         <Trigger Property="IsGrouping" Value="true"> 
          <Setter Property="ScrollViewer.CanContentScroll" Value="false"/> 
         </Trigger> 
         <Trigger Property="ScrollViewer.CanContentScroll" SourceName="DropDownScrollViewer" Value="false"> 
          <Setter Property="Canvas.Top" TargetName="OpaqueRect" Value="{Binding VerticalOffset, ElementName=DropDownScrollViewer}"/> 
          <Setter Property="Canvas.Left" TargetName="OpaqueRect" Value="{Binding HorizontalOffset, ElementName=DropDownScrollViewer}"/> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

затем, если вы хотите открыть \ близко в поле со списком вам просто нужно установить его свойство тега на True \ False:

<ComboBox Style="{DynamicResource ComboBoxStyle1}" Tag="True"/> 
+0

избил меня! однако этот шаблон является неполным из-за отсутствия статических ресурсов. Некоторые люди, возможно, не смогут исправить это самостоятельно, когда читаете свой ответ. Я просто запустил образец шаблона, удалив все отсутствующие средства выделения ресурсов. Возможно, используйте свойство 'BasedOn' в стиле и оставляйте значения по умолчанию – Maverik

+0

, вы правы! извините ... отредактировал ответ. Пожалуйста, отметьте этот ответ – user1064519

+0

@ Maverik очень благодарен вашим работам, я видел вас в чате в WPF, говоря об этом, и я должен уйти, поэтому не мог оценить тогда. - :) – 2013-03-20 13:54:12

3

ComboBox имеет свойство IsDropDownOpen установить его в качестве True.And если вы хотите выпадающий оставаться открытым только во время редактирования, то вы можете установить StaysOpenOnEdit равна истинной

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="Auto"/> 
    </Grid.RowDefinitions> 
    <ComboBox x:Name="cmb" IsDropDownOpen="True"/> 
    <Button Click="Button_Click" Content="OK" Grid.Row="2"/> 
</Grid> 


    private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     cmb.IsDropDownOpen = false; 
    } 

<ComboBox x:Name="cmb" StaysOpenOnEdit="True"/> 

Я надеюсь, что это поможет.

+0

спасибо, но это не соответствовало моему требованию. ComboBox всегда должен всплывать, даже я выбираю любой ComboBoxItem. И я попытался добавить 'cmb.IsDropDownOpen = true;' в событие 'SelectionChanged', оно все равно закрывается автоматически. – 2013-03-20 09:36:59

+0

Я обновил ответ – ethicallogics

+0

Я думаю, что вы хотите, это StaysOpenOnEdit – ethicallogics

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