首页 > 解决方案 > Avalonia UI - 如何从代码中获取/设置 UI 控件的属性

问题描述

TabControl在我的 XAML 中定义了几个 s。我希望我的 ViewModel 知道所选的TabItem名称或索引。TabItem

我还有一个ScrollViewer我想在按下按钮时总是滚动到底部。

如果我能以某种方式访问​​我的代码中的元素,我应该能够解决上述两个问题。

我怎样才能达到这样的效果:

var tabIndex = this.GetElement<TabControl>("NameOfSomeTabControl").SelectedIndex;

var scrollViewer = this.GetElement<ScrollViewer>("NameOfSomeScrollViewer");
scrollViewer.VerticalScrollBarValue = scrollViewer.VerticalScrollBarMaximum;

编辑:xaml的代码,viewModel 代码

编辑2:看起来我能够从窗口类中获取元素的实例,但是我仍然不确定如何将引用传递给 ViewModel。

编辑3:我可以使用下面的代码实现滚动查看器自动进入底部。但是,一旦调用该方法,似乎滚动就会被禁用。

var tbRaw = this.Get<TextBlock>("tbRawOutput");
tbRaw.PropertyChanged += (s,e) => {
    var svRaw = this.Get<ScrollViewer>("svRawOutput");
    svRaw.Offset = new Vector(svRaw.Offset.X, svRaw.Extent.Height -svRaw.Viewport.Height);};

标签: c#.net-coreavaloniaui

解决方案


一个更简单的方法可能是在你的主类中使用DataContextChanged事件处理程序:Window

public MainWindow()
{
    InitializeComponent();
    DataContextChanged += (object sender, EventArgs wat) =>
    {
        // here, this.DataContext will be your MainWindowViewModel
    };
}

然后,您可以在视图模型上附加更多事件处理程序/使用 getter 和 setterWindow


推荐阅读