【问题标题】:Change cursor in code behind在后面的代码中更改光标
【发布时间】:2012-01-11 17:51:02
【问题描述】:

我有一个视图模型类(使用 Prism)。它有一个关联的 XAML 视图。当我这样做时

this.Cursor

没有任何可用的 Cursor 属性。我必须做什么才能访问光标以便更改其图标?

【问题讨论】:

    标签: c# .net wpf


    【解决方案1】:

    由于Cursor 是一个与UI 相关的属性,您应该将光标设置在视图中,而不是视图模型中。 this.Cursor 应该可以从视图后面的代码中正常工作

    如果您的 Cursor 基于 ViewModel 中的某些内容,例如它正在加载数据,那么当 IsLoading 属性设置为 true 时,请在 XAML 中使用 DataTrigger 更改光标/p>

    <Style TargetType="{x:Type Window}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding IsLoading}" Value="True">
                <Setter Property="Cursor" Value="Wait" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
    

    【讨论】:

    • 我需要在以特定方法完成工作时更改光标。我没有像 IsLoading 这样的属性。我想在此方法的开头设置光标并在最后改回。还有其他方法吗?另外,由于它都在主线程上,它的效果如何?
    • @4thSpace 如果您的方法在ViewModel 中,那么最好在ViewModel 上创建IsLoading 属性并使用DataTrigger。 ViewModel 不应该关心 UI,包括 Cursors。
    • @4thSpace 我不确定你为什么关心线程。唯一可能出现问题的情况是您在后台线程上进行处理。然后,您必须记住在开始处理之前或使用Dispatcher 更新主线程上的IsLoading 属性。
    • 我试过你的 XAML。我没有看到 DataTrigger 具有“属性”,所以我使用了 Binding。我收到构建错误:无法解析样式属性“光标”。你对此有什么想法吗?
    • 好的,我已经编译好了。我没有 TargetType(但仍然需要 Binding 而不是 Property)。我没有看到光标有任何区别。也许是因为事情发生得太快了。有什么有效的方法来测试吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-05
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 2010-12-30
    相关资源
    最近更新 更多