像WPF中的Mac OSX Dock一样对接

时间:2010-10-30 08:07:18

标签: wpf docking

链接上的Here是一个不错的对接应用程序,但是我需要像Mac OSX dock这样的东西,它可以在没有占用屏幕的情况下进入Docks,当我们需要它时它就在那里。

请告诉我没有占用屏幕空间的对接解决方案。

1 个答案:

答案 0 :(得分:0)

这是在黑暗中拍摄的,基于我想象你想要达到的目标。我假设您正在运行基于Window的完全信任本地应用程序。信任可能无关紧要,只需设置背景。

我想象的解决方案有三个部分:

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'>