2012-03-22 3 views
0

Это (должен быть) простой вопрос. Я хотел бы создать компонент, например, кнопку уведомления Facebook (поэтому, если вы нажмете на нее, появится раскрывающееся меню, и появляется «значок» с количеством непрочитанных уведомлений).Настроить компонент combobox silverlight

Я решил настроить компонент со списком по умолчанию (он имеет всплывающее окно и кнопку переключения), удалив текстовое поле и стрелку внутри кнопки переключения и добавив кнопку переключения в холст, чтобы я мог абсолютно позиционировать значок.

Итак, я хочу «экспортировать» некоторые основные функции и возможность дальнейшего стильного компонента (например, установить шаблон для кнопки переключения, для значка и для каждого элемента в списке).

Я не могу найти, как я могу достичь этого .. сделайте «первый» уровень стиля, чтобы люди, которые используют мой компонент, не знают, что это поле со списком, но вместо этого они могут устанавливать мои свойства (например, «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> 
0

Если вы не против оплаты сторонних компонентов, всегда есть RadControls for Silverlight from Telerik. Набор содержит RadDropDownButton control, который, как я думаю, должен делать именно то, что вам нужно.

+0

Я предпочитаю стиль версии Microsoft, если это возможно .. – Francesco

Смежные вопросы