我想在屏幕上获得一个XAML指定的界面,这样我就可以学习WPF了。但我不想从一个已经完成所有连接的视觉工作室项目开始。我不希望c#“hello world”等于在“main()”函数中绘制屏幕上的xaml文件中指定的窗口。
那么如何将XAML文件连接到对象并从控制台应用程序在屏幕上绘制它?请连接一个简单的事件。说一个“hello world”按钮(在xaml中指定),按下时会使控制台打印“hello world”。我更愿意通过以下方式查看委托功能。
另外:This answer显示ui runloop接管主线程,是否有任何糖为应用程序创建一个新线程,所以它不会阻止被调用者?
如果你想知道为什么我问这个问题,或者为什么我想用这种方式学习WPF。我想从一个没有其他显示信息的插件中触发ad-hoc UI元素。
对于那些发现这个问题过于模糊的人,这里有一个xaml的例子
<Canvas xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<TextBlock>Hello World!</TextBlock>
</Canvas>
这个问题的主要应用是一个控制台c#app,XAML文件代表一个带有单个按钮的表单,按下按钮将“hello world”打印到控制台。我希望看到将按钮连接到我的代码的不同方式,我不明白我怎么能更清楚。
答案 0 :(得分:4)
冒被告知这不是你问的问题,但是因为它不清楚:
class WpfSample
{
[STAThread]
public static void Main()
{
var window = new Window()
{
Title = "WPF",
Width = 640,
Height = 480
};
var grid = new Grid();
var button = new Button()
{
Content = "Click Me",
Width = 100,
Height = 50,
};
grid.Children.Add(button);
window.Content = grid;
button.Click += (s, e) =>
{
MessageBox.Show("You clicked me");
};
window.ShowDialog();
}
}
话虽如此,如果您想要WPF应用程序的插件, 这样做(所有代码)不是要走的路。
我们在插件中定义控件,而无需在代码中将其全部挂钩, 我们使用MEF。
更新 要从存储在某处的某些XAML加载UI,可以使用ValueConverter
public class StringToXamlValueConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string xaml;
if (value != null && !String.IsNullOrWhiteSpace(value.ToString))
{
xaml = value.ToString();
}
else
{
xaml = Settings.Default.DefaultLayoutView;
}
var root = XamlReader.Parse(xaml);
return root;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
然后你可以设置一些元素的内容:
<ContentControl Content="{Binding Layout.View, Converter={StaticResource StringToXamlConverter}}"/>
答案 1 :(得分:1)
直截了当地说:
我想从没有其他显示信息的插件中触发ad-hoc UI元素。
绝对不需要从头开始绘制窗口,而是可以在ShowDialog()
对象上使用Window
方法:
var myWindow = new Window();
myWindow.ShowDialog();
当然,您可以通过编程方式将所需的控件添加到该窗口,或者您可以将其定义为XAML,然后将其重新水合为窗口。
话虽如此,理想情况下,插件的主机应该为您提供一个可以添加内容的容器(或提供您手动滚动的对话服务),而不是必须直接强制显示内容。插件。