Стыковка, как Mac OSX Dock в WPF - PullRequest
       4

Стыковка, как Mac OSX Dock в WPF

2 голосов
/ 30 октября 2010

As Здесь на ссылке - хорошее приложение для док-станции, но мне нужно что-то вроде док-станции Mac OSX, она стыкуется сбоку без экрана, а когда нам это нужно, она там.

Подскажите пожалуйста решение для стыковки, которое не занимает место на экране.

1 Ответ

0 голосов
/ 30 октября 2010

Вот выстрел в темноте, основанный на том, что, как я полагаю, вы пытаетесь достичь.Я предполагаю, что вы используете локальное приложение с полным доверием на основе Windows.Доверие, вероятно, не имеет значения, просто настройка контекста.

У меня есть три решения, которые я представляю:

Window1.xaml (your main app window)
 <Window blah blah>
  <Grid>
  <!--Your application content-->
    <local:PseudoDock VerticalAlignment='Bottom' />
  </Grid>
</Window>

PseudoDock.xaml
<UserControl Height='5'>
 <UserControl.Triggers>
  <Trigger Property='FrameworkElement.IsMouseOver'>
   <Setter Property='Height' Value='NaN' />
  </Trigger>
 </UserControl.Triggers>
 <ItemsControl>
  <ItemsControl.ItemsPanelTemplate>
   <StackPanel Orientation='Horizontal' />
  </ItemsControl.ItemsPanelTemplate>
  <ItemsControl.ItemTemplate>
   <DataTemplate>
    <Button Command='{Binding Path=Command}'>
     <StackPanel>
      <Image Source='{Binding Path=Icon}' />
      <TextBlock Source='{Binding Path=Label}' />
     </StackPanel>
    </Button>
   </DataTemplate>
  </ItemsControl.ItemTemplate>
 </ItemsControl>
</UserControl>

Важная особенность док-станции в том, что она имеет высоту 5 пикселей., который незаметен в нижней части, и имеет указатель мыши, который поднимает его на полную высоту.(Вы также можете попробовать установить явную высоту, я полагаю, что при установке высоты на NaN она будет измеряться по отношению к ее дочерним элементам, но я могу ошибаться).

Наконец, структура элементов, составляющих док:

DockItem.cs
class DockItem{
 ICommand Command{get;set;}
 String Label{get;set;}
 ImageSource Icon{get;set;}
}

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

<Window WindowStyle='None' Background='Transparent' State='Maximized'>
...