Пользовательский контроль wpf Предварительный выбор RadioButton

Я получил очень простой пользовательский элемент управления (диаграммы видимости + указатели даты и некоторые радиокнопки для управления фильтрацией и т. Д.):

<GroupBox Header="Scale" Width="159" HorizontalAlignment="Left" Margin="10,47,0,0"
          Height="38" VerticalAlignment="Top" Name="scalingBox">
    <Canvas Height="16">
        <RadioButton Name="scaleDays" Content="Days" GroupName="g2" Width="47"
                     IsChecked="True" Checked="scale_Change"/>
        <RadioButton Name="scaleHours" Content="Hours" GroupName="g2" Canvas.Left="60"
                     Width="59" Checked="scale_Change"/>
    </Canvas>
</GroupBox>

Первый бит это настройка IsChecked Значение true на первой кнопке ничего не делает, когда отображается элемент управления.

В поисках обходного пути я предоставил несколько открытых методов для проверки нужных кнопок в родительском окне, но когда у меня их несколько MyControl вызов этих методов проверяет кнопки только в одном экземпляре, где методы были вызваны последними. как это:

myControl1.SetDefaultScale();
myControl2.SetDefaultScale();

проверяет только кнопки myControl2оставив все кнопки в группе неактивными myControl1,

Есть идеи, что может быть причиной этого?


И да, это было название группы, которая была разделена между всеми элементами управления... Спасибо Аран

3 ответа

Решение

Я получил ваш код, поместил его в новый проект и в главное окно. и первая кнопка подошла проверил.

У RadioButton есть некоторые ошибки, сначала они теряют свои привязки, если вы нажмете на них, смотрите здесь. Я описал поведение, в котором имена групп распределяются между формами, как и некоторые другие люди. как обойти эти проблемы, это связать каждую радио-кнопку отдельно и самостоятельно обработать логику выбора. (если выбран один, установите свойства, с которыми другие в "группе" связаны, чтобы быть ложными)

Я надеюсь, что это будет исправлено в следующем выпуске. но пока я привязываю каждую радио-кнопку отдельно и не использую названия групп.

Причина, по которой только одна радиокнопка может быть отмечена в форме, связана с областью действия GroupName.

Когда я попытался использовать два экземпляра пользовательских элементов управления с переключателями и без указания GroupName, область действия эффекта переключателя была ограничена рамкой группы внутри пользовательского элемента управления.

Когда для переключателей в пользовательском элементе управления было указано одно и то же GroupName, это означало, что все переключатели в окне имели одинаковое GroupName и включены в одну группу. Только одна кнопка в группе во всем окне может быть проверена одновременно.

Ответ заключается в том, чтобы удалить свойство GroupName из переключателей и позволить естественной группировке GroupBox вступить в силу.

У меня похожие проблемы с несколькими вкладками, использующими один и тот же пользовательский элемент управления. Удалил GroupName, и все заработало, как ожидалось. Дуг указал, что они являются общими для всего созданного объекта (в широком диапазоне). Получил это, вручную установив проверенное значение.

Другие вопросы по тегам