⑴ 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}"