2012-03-22 31 views
0

這是(應該是)一個簡單的問題。 我想創建一個組件,如Facebook通知按鈕(所以如果你點擊它,出現一個下拉菜單,並且有未讀通知數量的「徽章」)。自定義的Silverlight ComboBox組件

我想通過刪除文本框和切換按鈕內的箭頭,並在畫布內添加切換按鈕來定製默認的組合框組件(它具有彈出按鈕和切換按鈕),以便我可以絕對地定位徽章。

所以..我要「出口」的一些基本的行爲,並有可能進一步時髦的成分(比如設置一個模板切換按鈕,用於徽章,並在列表中的每個項目)。

我無法找到我怎麼能做到這一點..做出的風格「第一」水平,使誰用我的部分人不知道它是一個組合框,而是他們可以把我的屬性(如「ButtonContent」, 「NotificationItem」 和 「徽章」)...

謝謝。 Francesco

回答

0

我決定不樣式組合框,而是創造一個新的組件(由組合框強烈的啓發)

<UserControl x:Class="silverlight.Components.Notification.View.NotificationSummary" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows" 
      xmlns:sys="clr-namespace:System;assembly=mscorlib" 
      xmlns:conv="clr-namespace:silverlight.ViewModel.Converters" 
    mc:Ignorable="d" 
    d:DesignHeight="25" d:DesignWidth="100"> 

    <StackPanel x:Name="LayoutRoot"> 
     <StackPanel.Resources> 
      <conv:NumberToVisibilityConverter x:Key="HasUnreadEventsConverter" /> 
     </StackPanel.Resources> 

     <ToggleButton x:Name="eventButton" Click="notificationButtonClicked"> 
      <ToggleButton.Content> 
       <StackPanel Orientation="Horizontal"> 
        <Border Padding="5 3" VerticalAlignment="Center" HorizontalAlignment="Left"> 
         <ContentPresenter x:Name="buttonContent" /> 
        </Border> 
        <Border x:Name="badge" Padding="5 2" CornerRadius="5" Margin="0 0 5 0" 
           HorizontalAlignment="Right" VerticalAlignment="Center" 
           BorderThickness="1" 
          Visibility="{Binding numberOfUnreadEvents, Converter={StaticResource HasUnreadEventsConverter}}"> 
         <Border.BorderBrush> 
          <SolidColorBrush Color="Black" /> 
         </Border.BorderBrush> 
         <Border.Background> 
          <SolidColorBrush Color="Red"/> 
         </Border.Background> 
         <TextBlock x:Name="badgeText" Text="{Binding numberOfUnreadEvents}"/> 
        </Border> 
       </StackPanel> 
      </ToggleButton.Content> 
     </ToggleButton> 

     <Popup IsOpen="{Binding ElementName=eventButton, Path=IsChecked}" x:Name="notificationPopup"> 
      <Border x:Name="popupBorder" Background="White" CornerRadius="0 0 5 5" 
        Padding="5"> 
       <Border.Effect> 
        <DropShadowEffect BlurRadius="5" Direction="315" ShadowDepth="5" Color="Black" /> 
       </Border.Effect> 
       <ListBox x:Name="eventsList" ItemsSource="{Binding events}" 
         IsHitTestVisible="False"> 
        <ListBox.ItemTemplate> 
         <DataTemplate> 
          <ContentPresenter x:Name="itemTemplate" /> 
         </DataTemplate> 
        </ListBox.ItemTemplate> 
       </ListBox> 
      </Border> 
     </Popup> 
    </StackPanel> 
</UserControl>