RibbonComboBox выбранный элемент галереи возвращается к старому значению при отпускании мыши - PullRequest
5 голосов
/ 22 октября 2010

Я заменил ленты WPF на новейшую библиотеку, выбор в выпадающем списке изменил запуск перезагрузки сетки данных. У меня проблема с RibbonComboBox.

Если я оставляю курсор мыши вне выбранного элемента, выбранный элемент возвращается к старому элементу. Если я удерживаю курсор на выбранном элементе, пока перезагрузка сетки данных не будет завершена, новое значение будет принято в ленточный ящик.

Я пропускаю какое-то специальное свойство ribboncombobox, чтобы принимать изменения только по клику, или это ошибка в компоненте combobox? Единственный возможный обходной путь - запуск функции перезагрузки сетки данных в потоке, чтобы комбобокс ленты завершил свои процессы.

пример кода здесь:

<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>      

Ответы [ 2 ]

1 голос
/ 24 октября 2011

Это ошибка в контроле ленты. См. Отчет об ошибке подключения .

0 голосов
/ 11 мая 2013

Ниже представлен действующий обходной путь (.Net 4.0), основанный на обходном пути, указанном в Ошибка подключения .

Я обнаружил, что вам нужно только Mouse.Capture(null) для события SelectionChanged:

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

Со следующим кодом:

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

Или, как производный класс:

/// <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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...