c# - 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);};
解决方案
一个更简单的方法可能是在你的主类中使用DataContextChanged
事件处理程序:Window
public MainWindow()
{
InitializeComponent();
DataContextChanged += (object sender, EventArgs wat) =>
{
// here, this.DataContext will be your MainWindowViewModel
};
}
然后,您可以在视图模型上附加更多事件处理程序/使用 getter 和 setterWindow
推荐阅读
- javascript - Nodejs 将 2 个中间件变成 1 个
- python - AttributeError:“str”对象没有属性“xpath”
- regex - 无法或两个 grep 的正则表达式
- python - seabornplot + pyplot 导致 Mac OS X 重启
- shiny - 在闪亮的模式中动态显示/隐藏 tabPanels
- qt - 如何在 Ubuntu 16.04 上将 Qt 从 5.5.1 更新到 5.7?
- sql - 需要从具有只读数据库访问权限的 XML 中读取
- javascript - Youtube-DL 视频未找到可疑服务器块
- powershell - 来自 14 列数组语法的 foreach 中的 Powershell 脚本
- wix - 主要升级不会删除 Wix 安装程序中的现有文件