WPF:如何使用C#设置属性Helptext

时间:2018-07-28 06:38:10

标签: c# wpf accessibility

我正在使用WPF开发文本编辑器,该文本编辑器也应适用于盲人。

要让屏幕阅读器读取程序界面,必须为组件设置Helptext属性。

在XAML中,它是这样工作的:

SET @r=0;
UPDATE student_table SET rank= @r:= (@r+1) ORDER BY vote DESC;

但是如何在C#中设置属性HelpText?

2 个答案:

答案 0 :(得分:0)

常规上,附加属性具有静态方法,该方法是以“ Set”为前缀的属性名称,以便从代码中进行更新。在这种情况下 SetHelpText(DependencyObject, value)

AutomationProperties.SetHelpText(ChkBarrierefrei, "Here the accessibility of the editor can be activated or deactivated")

答案 1 :(得分:0)

您已经问过一个有关如何使用绑定来实现目标的示例,这是一个简单的示例。


我们首先需要为每个所谓的 ViewModel 创建一个类作为我们的基类。

public class ViewModelBase : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void RaisePropertyChanged([CallerMemberName] string propertyName)
    {
        this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

我们现在可以从该类派生特定的ViewModel,即我们要用来保存BarriereFrei帮助文本的ViewModel。

public class MyViewModel : ViewModelBase
{
    private string barriereFreiHelpText = "Here the accessibility of the editor can be activated or deactivated.";

    public string BarriereFreiHelpText
    {
        get { return this.barriereFreiHelpText; }
        set
        {
            if (value == this.barriereFreiHelpText)
            {
                return;
            }

            this.barriereFreiHelpText = value;
            this.RaisePropertyChanged(); // This line makes sure the UI is updated 
                                         // whenever a new help text is set.            
            }
    }
}

在视图中(我假设它称为MainWindow),我们现在可以使用以前定义的ViewModel,如下所示:

<Window x:Class="MyProject.Views.MainWindow"
        xmlns:viewModel="clr-namespace:MyProject.ViewModels">

    <Window.DataContext>
        <viewModel:MyViewModel />
    </Window.DataContext>

    <Grid>
        <CheckBox x:Name="ChkBarrierefrei" 
                  Content="Editor ba_rrierefrei" 
                  ToolTip="Hier kann die Barrierefreiheit des Editors aktiviert oder deaktiviert werden" 
                  AutomationProperties.HelpText="{Binding BarriereFreiHelpText}"
                  Margin="10" 
                  Click="ChkBarrierefrei_CheckedChanged"/>
    </Grid>
</Window>

您是否注意到了

  

AutomationProperties.HelpText="{Binding BarriereFreiHelpText}"

部分?这就是魔术发生的地方。该行的作用是确保HelpText属性始终等于您在ViewModels BarriereFreiHelpText属性中设置的属性。


要使所有这些正常工作,您需要在应用程序中的某个位置连接ViewModel和Window,如下所示:

MyViewModel viewModel = new MyViewModel();
MainWindow window = new MainWindow();
window.DataContext = viewModel;

,您现在可以在运行时使用来更改帮助文本

(window.DataContext as MyViewModel).BarriereFreiHelpText = "Whatever you want it to be";

,UI会自动使用新的帮助文本进行更新。


与直接设置CheckBoxAutomationProperties.HelpText的{​​{1}} es much cleaner属性相比,这绝对是一个更好的解决方案(您在更改ViewModel的属性时不使用了解任何用户界面)。

我知道这一切可能会让人不知所措,但我强烈建议您遵循所谓的MVVM方法,不仅针对less tightly coupled es帮助文本,而且针对所有内容。您将节省很多时间,代码行和令人讨厌的错误。


进一步阅读:


我希望采用MVVM方法不应该太迟了,我希望您能从MVVM中获得很多成功和乐趣-相信它后,它真的很好玩,相信我;)