Windows Phone 7 開發小技巧

來源:互聯網
上載者:User

1.使用Popup來實現自訂的彈出效果。Popup控制項彈出的塊會一直在螢幕的最前方,所以使用Popup可以實現各種各樣的彈出框,並且給了你極大的自訂的空間,很多第三方的彈出框控制項的原理其實就是使用了Popup來封裝上各種效果來實現的。

Popup使用的方法:
private Popup popup;
popup = new Popup();
popup.Child = new 控制項類();
//開啟
popup.IsOpen = true;
//關閉
popup.IsOpen = false

或者
xaml代碼
<Popup x:Name="popup">
    <Border>
       <StackPanel>
            ……
        </StackPanel>
    </Border>
</Popup>

cs代碼
//開啟
popup.IsOpen = true;
//關閉
popup.IsOpen = false

2.在TextBlock控制項中使用<LineBreak></LineBreak>進行換行。

<TextBlock TextWrapping="Wrap">
          測試         
   <LineBreak></LineBreak>
   <LineBreak></LineBreak>
          測試
   <LineBreak></LineBreak>
   <LineBreak></LineBreak>
          測試
</TextBlock>

 

3.捕獲物理按鍵返回鍵,開啟頁面,離開頁面。windows phone有3個物理按鍵,返回鍵,開始鍵,搜尋鍵,後面兩個無法在程式中捕獲到。

//點擊返回按鈕
protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e) 
{
    //你的代碼
    e.Cancel = false;          
    base.OnBackKeyPress(e); 
}
//從其他頁面進入該頁面
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
     //你的代碼
     base.OnNavigatedTo(e);
}
//離開當前的頁面
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
   //你的代碼
   base.OnNavigatedFrom(e);
}

4.擷取父控制項裡面的子控制項的方法。之前在判斷ListBox控制項什麼時候滾到底的時候使用過該方法,這個方法很常用。

        //擷取第一個子類型 
public static T FindChildOfType<T>(DependencyObject root) where T : class
{
var queue = new Queue<DependencyObject>();
queue.Enqueue(root);
while (queue.Count > 0)
{
DependencyObject current = queue.Dequeue();
for (int i = VisualTreeHelper.GetChildrenCount(current) - 1; 0 <= i; i--)
{
var child = VisualTreeHelper.GetChild(current, i);
var typedChild = child as T;
if (typedChild != null)
{
return typedChild;
}
queue.Enqueue(child);
}
}
return null;
}

//擷取所有的子類型
public static List<T> FindAllChildOfType<T>(DependencyObject root) where T : class
{
var queue = new Queue<DependencyObject>();
queue.Enqueue(root);
List<T> allChild = new List<T>();
while (queue.Count > 0)
{
DependencyObject current = queue.Dequeue();
for (int i = VisualTreeHelper.GetChildrenCount(current) - 1; 0 <= i; i--)
{
var child = VisualTreeHelper.GetChild(current, i);
var typedChild = child as T;
if (typedChild != null)
{
allChild.Add(typedChild);
}
queue.Enqueue(child);
}
}
return allChild;
}

5. 使用<ControlTemplate>……</ControlTemplate>來擴充控制項的各種自訂化的效果,當你需要在控制項上實現一些動畫的效果,或者在控制項上再嵌入其他的一些控制項都可以通過設計一個ControlTemplate來實現。

如實現一個按鈕的單擊效果:

            <Button Content="Button" Height="72" HorizontalAlignment="Left" Margin="103,197,0,0" Name="button1" VerticalAlignment="Top" Width="160">
<Button.Template>
<ControlTemplate>
<Grid Background="Transparent">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Pressed">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="ButtonBackground" Storyboard.TargetProperty="Background">
<DiscreteObjectKeyFrame KeyTime="0" Value="YellowGreen"/>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="ButtonBackground" Storyboard.TargetProperty="BorderBrush">
<DiscreteObjectKeyFrame KeyTime="0" Value="YellowGreen"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Border x:Name="ButtonBackground" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Margin="{StaticResource PhoneTouchTargetOverhang}">
<ContentControl x:Name="ContentContainer" Foreground="{TemplateBinding Foreground}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" Padding="{TemplateBinding Padding}" Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}"/>
</Border>
</Grid>
</ControlTemplate>
</Button.Template>
</Button>

6.顯示和隱藏手機的頂部托盤,就是頂部那個訊號和電池資訊那塊東西。
//顯示
SystemTray.IsVisible = true;
//隱藏
SystemTray.IsVisible = false;

 

遇到一個問題:ApplicationBar的高度無法自訂,當ApplicationBarMenuItem為偶數的時候,下面還多了一大截的空間很影響美觀(為奇數的時候就不會多出這一大截的空間,不知道微軟為何要這樣設計),大家有沒有相關的解決方案呢?

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.