原文:
【uwp】對 thickness 型別屬性進行動畫
在 uwp 中,出於效能考慮,微軟是不建議、不推薦對會影響布局的屬性進行動畫的。例如 width 和 height 這種,如果真的需要對這些屬性進行動畫的話(畢竟需求就擺在那裡),可以將 animation 的 enabledependentanimation 屬性設定為 true 來對這些屬性進行動畫的。
但是,對於 thickness 型別來說,這是行不通的,因為 uwp 中並沒有 thicknessanimation 這種動畫型別(ps:wpf 裡是有這種動畫型別的說)。
不過既然我標題都寫了出來,那辦法肯定是有的。thickness 就是四個方向分量,也就是說,對這四個方向分量進行動畫就等於對這個 thickness 進行了動畫。
還有另外一點要注意的是,thickness 型別的四個屬性並不是依賴屬性。
例如:
control.margin.left = 10;這一句是沒有效果的。
要實現效果,只能對 margin 屬性從新賦乙個值:
var margin =control.margin;也就是說,我們需要乙個可繫結的 margin。(我就叫它 bindablemargin)margin.left = 10
;control.margin = margin;
新建乙個使用者控制項:
為什麼是使用者控制項?因為經過我的發現,我們自定義的類的依賴屬性,得有 xaml 檔案才能進行動畫。(不信你可以試試^-^)
然後修改 bindablemargin.xaml 如下:
<相當簡單的一段 xaml,設計器就無視好了。重點在 bindablemargin.xaml.cs 裡,修改**:dependencyobject
x:class
="animatethicknessdemo.bindablemargin"
xmlns
=""xmlns:x
=""xmlns:d
=""xmlns:mc
=""mc:ignorable
="d"
/>
public別看**這麼多,其實不複雜。建構函式傳入需要動畫的控制項。然後四個方向的依賴屬性,值發生改變時回寫到控制項上。partial
class
bindablemargin
_owner =owner;
}public
double
bottom
return
ownerbottom;
}set }
public
double
left
return
ownerleft;
}set }
public
double
right
return
ownerright;
}set }
public
double
top
return
ownertop;
}set }
private
static
void
bottomchanged(dependencyobject d, dependencypropertychangedeventargs e)
private
static
void
leftchanged(dependencyobject d, dependencypropertychangedeventargs e)
private
static
void
rightchanged(dependencyobject d, dependencypropertychangedeventargs e)
private
static
void
topchanged(dependencyobject d, dependencypropertychangedeventargs e)
}
然後動畫的例子**:
bindablemargin margin = newbindablemargin(control);
doubleanimation animation = new
doubleanimation();
animation.enabledependentanimation = true
;animation.from = 0
;animation.to = 100
;animation.duration = timespan.fromseconds(1
);storyboard.settarget(animation, margin);
storyboard.settargetproperty(animation,
"left
");
await storyboard.beginasync();//說了這麼多,還是說說有啥應用吧。winrtxamltoolkit 裡的擴充套件方法。
margin.left = 100;
這是乙個類似 it 之家的通知控制項。通過動畫了 margin 的 right 來實現的。
當然應用還有很多,例如對 border 的圓角進行動畫。通過這麼一種「橋」的方式,我們可以對很多屬性,並不侷限於 thickness 型別,也進行動畫,這裡就留給各位看官發揮想象了。
UWP 區分裝置型別
在寫uwp應用時,通常會需要在 裡面判斷當前是什麼裝置型別,以便在不同的裝置上顯示出不同的效果或者內容。1.通常我們都知道如何在c 裡面去判斷 public static deviceformfactortype getdeviceformfactortype 2.windows community...
WP8 1 UWP手機裝置對狀態列操作
改uwp和wp8.1手機裝置的狀態列。首先先說較為普遍的wp8.1裝置 首先新增引用 using windows.ui.viewmanagement 其次就可以使用 statusbar了,它提供了以下方法 statusbar statusbar statusbar.getforcurrentview...
對匿名型別的幻想
在激動了五分鐘後的惆悵 匿名型別了解已久,今天真的用了才發現,有點點雞肋。首先它的作用域只在方法內部,對方法外部只能先轉換為object,這個時候對它就真的是匿名了。msdn說到 匿名型別 具有方法範圍。若要向方法邊界外部傳遞乙個 匿名型別 或乙個包含 匿名型別 的集合,必須首先將 匿名型別 強制轉...