[英]WPF XAML Hello World from scratch, with delegates
我想在屏幕上获取XAML指定的界面,以便可以学习WPF。 但是我不想从已经完成所有连线的Visual Studio项目开始。 我不希望c#“ hello world”等同于在屏幕上通过“ main()”函数在xaml文件中指定一个窗口。
那么,如何将XAML文件连接到对象并通过控制台应用程序将其绘制在屏幕上? 请同时为一个简单的事件进行连线。 说一个“ hello world”按钮(以xaml指定),按下该按钮可使控制台打印“ hello world”。 我希望通过以下方式查看委托函数。
另外: 该答案显示了ui runloop接管了主线程,是否有任何糖可以为该应用创建一个新线程,从而不会阻塞被调用者?
如果您想知道为什么我要问这个问题,或者为什么我想以这种方式学习WPF。 我想从没有其他显示信息方式的插件中触发临时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#应用,XAML文件表示具有单个按钮的表单,按下该按钮将向控制台输出“ hello world”。 而且我想了解将按钮连接到代码的不同方式,但我不知道如何更清晰。
冒被告知的危险不是您要的,但由于不清楚:
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}}"/>
切入要点:
我想从没有其他显示信息方式的插件中触发临时UI元素。
绝对没有任何需要画一个从无到有的窗口,而不是可以使用ShowDialog()
方法的Window
对象:
var myWindow = new Window();
myWindow.ShowDialog();
当然,你可以编程任何你想要的控件添加到该窗口,或者你可以有它已被定义为XAML的地方,你再重新水合物作为一个窗口。
话虽如此,理想情况下,插件的宿主应该为您提供一个可以向其添加内容的容器(或提供您手动滚动的对话框服务),而不是必须直接从该插件强制显示内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.