Предварительный выбор RadioButton пользовательского элемента управления wpf

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

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

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


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


person J K G    schedule 08.12.2009    source источник


Ответы (3)


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

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

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

person Aran Mulholland    schedule 08.12.2009

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

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

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

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

person Doug Ferguson    schedule 08.12.2009
comment
Что делать, если вы хотите поместить два переключателя в разные контейнеры (скажем, StackPanel), но при этом хотите, чтобы они были сгруппированы (т. е. в каждый момент времени выбирается только один)? - person digitguy; 22.06.2013

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

person Yudhi    schedule 21.06.2021