#c# #wpf #xaml #data-binding #wpf-controls
#c# #wpf #xaml #привязка к данным #wpf-элементы управления
Вопрос:
Я хочу показывать / скрывать всплывающие подсказки на переключателях в зависимости от того, какой переключатель в другой группе отмечен. Я попробовал BooleanToVisibilityConverter, и он работает для других элементов управления, но не для всплывающих подсказок.
<Page.Resources>
<BooleanToVisibilityConverter x:Key="b2v" />
</Page.Resources>
Переключатели, чтобы определить, видна ли всплывающая подсказка. ToolTip
должно быть видно, когда установлен флажок «inputText».
<RadioButton x:Name="InputText" Content="InputText" IsChecked="True" />
<RadioButton x:Name="Other" Content="Other" />
Переключатель с всплывающей подсказкой
<RadioButton x:Name="InputRows" Content="Rows">
<RadioButton.ToolTip>
<ToolTip x:Name="InputRowsToolTip"
Visibility="{Binding IsChecked,ElementName=InputText, Converter={StaticResource b2v}}">
ToolTip text here
</ToolTip>
</RadioButton.ToolTip>
</RadioButton>
Другие вещи, которые я пробовал, не работают:
- Оберните текст всплывающей подсказки в a
<TextBlock>
и включите туда параметр видимости — никакого эффекта. - Используйте
<TextBlock>
вместо<ToolTip>
и включите параметр видимости там — никакого эффекта. - Добавить
ToolTipService.ShowOnDisabled="False"
иToolTipService.IsEnabled="False"
во всплывающую подсказку, и RadioButton — всплывающая подсказка вообще не отображается.
Я могу заставить его вести себя так, как я хочу, с помощью методов в файле cs для InputTextRadioButton_Checked
and OtherRadioButton_Checked
и установить InputRowsToolTip.Visibility = Visibility.Visible
or Visibility.Collapsed
в зависимости от RadioButton, но, похоже, я должен быть в состоянии сделать это с помощью BooleanToVisibilityConverter, поскольку он работает для других элементов управления.
Ответ №1:
Я только что добавил DataContext
InputRows
DataContext="{Binding ElementName=InputText"
И ваш код.
<RadioButton x:Name="InputText" Content="InputText" IsChecked="True" />
<RadioButton x:Name="Other" Content="Other" />
<RadioButton x:Name="InputRows" Content="Rows" DataContext="{Binding ElementName=InputText}">
<RadioButton.ToolTip>
<ToolTip x:Name="InputRowsToolTip"
Visibility="{Binding RelativeSource={RelativeSource Self}, Path=DataContext.IsChecked, Converter={StaticResource b2v}}">
ToolTip text here
</ToolTip>
</RadioButton.ToolTip>
</RadioButton>
Элемент управления внутри области всплывающей подсказки переключателя напрямую не находит элемент управления снаружи. Вот почему я думаю, что лучше справиться с этим с помощью DataContext, мощного свойства зависимостей.
Вы не можете использовать форму ниже.
ElementName
RelativeSource AncestorType
Relative Source TemplateParent
этот пример исходного кода https://github.com/ncoresoftsource/stackoverflowsample/tree/main/src/answers/radiobutton-tooltip-other-binding
Комментарии:
1. Это не работает. Всплывающие подсказки остаются видимыми независимо от того, какой переключатель выбран.
2. @LisaB Я подтвердил, что образец исходного кода создан и выполнен. Вы хотите, чтобы я прикрепил пример исходного кода?
3. github.com/ncoresoftsource/stackoverflowsample/tree/main/src/…
4. Если я что-то пропустил, пожалуйста, скажите мне!
5. Спасибо! Код в вашем github сработал. В коде в вашем исходном ответе отсутствовал «DataContext» в «Path= DataContext. Проверено».