Пользовательский контроль 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, и все заработало, как ожидалось. Дуг указал, что они являются общими для всего созданного объекта (в широком диапазоне). Получил это, вручную установив проверенное значение.