⑴ WPF怎么从后台页面替换前台页面的控件模板(ItemTemplate)
看得出你的意思,你使用了mvvm模式,然后希望在viewmodel内部切换前端的DataTemplate。因为viewmodel理论上是不引用前端的,所以你肯定无法访问前端任何一个DataTemplate。所以你可以这样做:
把你需要在ViewModel中切换的DataTemplate切换到程序的资源字典中,资源字典也就是wpf的ResourceDictionary,你的ViewModel是可以访问到的。
在ViewModel中设置一个String类型的属性,例如SelectedTemplate,用于之后的模板切换。
在你前端的ItemTemplate位置绑定这个SelectedTemplate属性,但你需要一个Converter来辅助样式的切换。
<ListBox ItemTemplate ="{Binding Path=SelectedTemplate, Converter={StaticResource StringToDataTemplateConverter}}">
这个Converter你可以这么写:
:IValueConverter
这样一来前端的ItemTemplate就可以和ViewModel的SelectedTemplate完成绑定,你更改SelectedTemplate的值,你的Converter就会在资源字典中查找对应的DataTemplate了。
{
publicobjectConvert(objectvalue,TypetargetType,objectparameter,CultureInfoculture)
{
returnInternalConvert(value,targetType,parameter);
}
publicobjectConvertBack(objectvalue,TypetargetType,objectparameter,CultureInfoculture)
{
();
}
publicobjectInternalConvert(objectvalue,TypetargetType,objectparameter)
{
if(value==null)
{
returnnull;
}
varresources=Application.Current.Resources.MergedDictionaries.ToList();
foreach(vardictinresources)
{
foreach(varobjkeyindict.Keys)
{
if(objkey.ToString()==value.ToString())
{
returndict[objkey]asDataTemplate;
}
}
}
returnnull;
}
}
⑵ 如何使用wpf实现屏幕最前端的绘图
Windows里面不是你想置顶就置顶的,曾经有无数程序都想要把自己置顶,抢占用户桌面,于是Windows就定下来一套规矩。
简单地思考:如果有两个程序都想要把自己放在最前端,那么最后会是什么结果呢?
SetForegroundWindow function (Windows)
The system restricts which processes can set the foreground window. A process can set the foreground window only if one of the following conditions is true:
The process is the foreground process.
The process was started by the foreground process.
The process received the last input event.
There is no foreground process.
The process is being debugged.
The foreground process is not a Modern Application or the Start Screen.
The foreground is not locked (see LockSetForegroundWindow).
The foreground lock time-out has expired (see SPI_GETFOREGROUNDLOCKTIMEOUT in SystemParametersInfo).
No menus are active.
⑶ 如何在WPF中引用Windows.System.Forms.Integration-WPF
TIMER控件c#有5种时间控件1.System.Threading.Timer2.System.Timers.Timer3.System.Windows.Forms.Timer4.System.Web.UI.Timer5.System.Windows.Threading.DispatcherTimer其中第四个主要用于web开发中,第一个和第二个的触发事件和UI处于不同的线程,因此如果使用它们的触发事件来改变UI,会发生对象被占用的异常,第三个是WinForm的计时器,在WPF中也可以使用,不过必须添加System.Windows.Forms的引用,第五个是WPF自己的计时器,一般在WPF程序中最好使用该计时器,使用例子如下:DispatcherTimertimer=newDispatcherTimer();timer.Interval=TimeSpan.FromMilliseconds(1000);timer.Tick+=myEventHandler;//你的事件timer.Start();
⑷ C# WPF 使用Storyboard类的引用
参考
System::Windows::Media::Animation::Timeline
的
CurrentStateInvalidated 事件.
Storyboard 继承了 Timeline 的.
⑸ wpf 如何引用其他命名空间已经激活的自定义控件
xmlns:local="clr-namespace:激活控件的命名空间"
⑹ wpf中,如何引用其他xaml文件中的Resources
假设指定的 xaml 是一个 Window 对象,则比较简单的做法是
<Window.Resources>
<SolidColorBrushx:Key="myBrush"Color="Blue"/>
<Stylex:Key="myStyle"TargetType="{x:TypeButton}">
<SetterProperty="Background"Value="Red"/>
</Style>
</Window.Resources>
varwin=newWindow1();
varbrush=win.TryFindResource("myBrush")asBrush;
varstyle=win.Resources["myStyle"]asStyle;
⑺ 在WPF里面如何引用相对路径(非资源)
那就只能用绝对路径咯
img1.Source = new BitmapImage(new Uri("完整路径/Capture.jpg",UriKind.Absolute));
⑻ 学习WPF需要哪些基础知识,要学习C#吗
WPF是微软提供的一种用来开发“桌面应用”的技术(框架),这项技术本身和C#没有关系,必须会的是xaml语法,而不是编程语言。
关于xaml语法,是一种微软提供的新型的前端语言,可以理解为类似js+css;
参考微软介绍:
https://msdn.microsoft.com/zh-cn/library/windows/apps/xaml/br229566.aspx
单纯的使用Blend也可以开发WPF项目,完全不用写一行代码,就可以做出一个漂亮的界面。调用其他人写好的服务接口,就可以轻松的开发出wpf应用了。
比如常见的“天气预报”应用,就可以不用写后台代码(c#),直接调用一些开放的天气API获取数据,就可以让程序运行起来。
如果要做一些较为复杂的业务系统, 则必须有编程语言的参与,WPF可以与VB或C#两种编程语言结合,进行开发。 目前肯定是C#更优于VB.NET。
个人建议WPF和C#要分开,不要为了开发一个WPF程序而去学习C#,也不要因为希望把C#代码的工作可视化而去开发桌面应用。
C#是编程语言,开发侧重于逻辑、语法、执行效率和安全性,WPF是前端技术,侧重于美观、酷炫、用户体验。你应该选好自己侧重的方向去进行系统学习。
在VS里一边拖控件,一边写代码,这种学出来的都是四不像。
⑼ WPF,这个引用是怎么添加的
在VS解决方案中右键->添加->添加引用,找到你要添加的系统程序集,或者其他第三方的DLL文件添加就可以了
⑽ WPF中的模板如何以引用资源的形式放置
你上面模板定义放到窗口资源里
ItemTemplate="{StaticResource Node}"