2010-10-22 8 views
5

He reemplazado las cintas WPF a la biblioteca más reciente, la selección de cuadro combinado modificada desencadena la recarga de la cuadrícula de datos. Tengo un problema con RibbonComboBox.Elemento de galería seleccionado RibbonComboBox vuelve al valor anterior al salir del mouse

Si salgo con mousecursor fuera del elemento seleccionado, el elemento seleccionado se revierte al elemento anterior. si mantengo el cursor sobre el elemento seleccionado hasta que finalice la recarga de la cuadrícula, el nuevo valor se acepta en el listón combinado.

¿Extraño alguna propiedad especial de ribboncombobox para aceptar cambios solo por clic o es un error en el componente del cuadro combinado? única solución posible sería ejecutar la función de recarga de la cuadrícula de datos en el hilo para permitir que el combobox de la cinta termine sus procesos.

código de ejemplo aquí:

<r:RibbonComboBox> 
     <r:RibbonGallery SelectedValuePath="Content" SelectionChanged="pgSize_SelectionChanged"> 
     <r:RibbonGalleryCategory> 
      <r:RibbonGalleryItem Tag="20" Content="Size (20)" Foreground="Green" /> 
      <r:RibbonGalleryItem Tag="30" Content="Size (30)" Foreground="Green" IsSelected="True"/> 
      <r:RibbonGalleryItem Tag="50" Content="Size (50)" Foreground="Orange" /> 
      <r:RibbonGalleryItem Tag="100" Content="Size (100)" Foreground="Red" /> 
     </r:RibbonGalleryCategory> 
     </r:RibbonGallery> 
</r:RibbonComboBox>  

Respuesta

0

A continuación se proporciona una solución de funcionamiento (.NET 4.0), basada en la solución dada en el Connect Bug.

me pareció que sólo necesita la Mouse.Capture(null) en el caso SelectionChanged:

<ribbon:RibbonComboBox> 
    <ribbon:RibbonGallery SelectedItem="{Binding X}" 
          DisplayMemberPath="Name" 
          SelectionChanged="RibbonGallery_SelectionChanged"> 
     <ribbon:RibbonGalleryCategory ItemsSource="{Binding Y}" 
             DisplayMemberPath="Name" /> 
    </ribbon:RibbonGallery> 
</ribbon:RibbonComboBox> 

Con el siguiente código detrás:

void RibbonGallery_SelectionChanged(
    object sender, 
    RoutedPropertyChangedEventArgs<object> e) 
{ 
    Mouse.Capture(null); 
} 

O, como una clase derivada:

/// <summary> 
/// Fixes a known issue with the <see cref="RibbonGallery"/>. 
/// </summary> 
/// <remarks> 
/// See <a href="https://connect.microsoft.com/VisualStudio/feedback/details/666352/">Allow users to move mouse after selecting an item in WPF RibbonComboBox</a>. 
/// </remarks> 
public class RibbonGalleryEx : RibbonGallery 
{ 
    public RibbonGalleryEx() 
    { 
     this.SelectionChanged += (sender, e) => Mouse.Capture(null); 
    } 
} 
Cuestiones relacionadas