none
Photoshop里的窗口内的小窗口要怎么实现? RRS feed

  • 问题

  • 效果如图

    这种效果的“小窗口”是用控件做的,还是用窗口做的?而且支持自由拖拽以及活动窗口。而且主窗口不会因为小窗口的存在而操作不了主窗口。

    若是用控件做的,这是哪个控件做的?还支持自由拖拽以及活动窗口和不禁用主窗口操作.


    2016年10月15日 8:09

答案

全部回复

  • 自由拖动可以用Behavior来实现,参考http://blog.csdn.net/yysyangyangyangshan/article/details/8956668
    2016年10月16日 1:43

  • Hi 轮回的齿轮,

    从你的描述中,我觉得下面几种方式,你可以参考去实现类似Photoshop里的窗口内的小窗口。

    1: Pop Up

    XAML:

     <StackPanel Margin="0,0,287,279">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition/>
                    <ColumnDefinition/>
                </Grid.ColumnDefinitions>
                <CheckBox Name="PCheckBox" Width="100" Margin="60,10,0,0"
                  Content="Popup Window"/>
            </Grid>
            
            <Popup x:Name="popusBottom" IsOpen="{Binding ElementName=PCheckBox,Path=IsChecked}"
               PlacementTarget="{Binding ElementName=PCheckBox}"           
               AllowsTransparency="True"
               PopupAnimation="Fade"
               HorizontalOffset="20"
               VerticalOffset="20" 
               >
                <Canvas  Margin="150" Background="Green">
                    <Canvas.RenderTransform>
                        <RotateTransform x:Name="theTransform" />
                    </Canvas.RenderTransform>
                    <WrapPanel >
                        <WrapPanel.Background>
                            <ImageBrush   ImageSource="11.PNG"/>
                        </WrapPanel.Background>
                        <Button Click="Button_Click" Margin="15">Test</Button>
                        <ListBox Height="90" Margin="15">
                            <ListBoxItem>Item1</ListBoxItem>
                            <ListBoxItem>Item2</ListBoxItem>
                            <ListBoxItem>Item3</ListBoxItem>
                            <ListBoxItem>Item1</ListBoxItem>
                            <ListBoxItem>Item2</ListBoxItem>
                            <ListBoxItem>Item3</ListBoxItem>
                            <ListBoxItem>Item1</ListBoxItem>
                            <ListBoxItem>Item2</ListBoxItem>
                            <ListBoxItem>Item3</ListBoxItem>
                        </ListBox>
                    </WrapPanel>
                </Canvas>
            </Popup>
        </StackPanel>

    XAML.CS:

            public WPFPopup()
            {
                InitializeComponent();
                LocationChanged += new EventHandler(RuntimePopup_LocationChanged);
            }
    
            void RuntimePopup_LocationChanged(object sender, EventArgs e)
            {
                try {
                    var mi = typeof(Popup).GetMethod("UpdatePosition", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
                    mi.Invoke(popusBottom, null);
                }catch
                {
    
                }
            }

    2: 使用 WPF.MDI.DLL(这是一个第三方DLL,也有其他第三方控件) 来实现多文档接口(MDI)

    下面是一个简单的代码程序,你可以下载调试学习。

    https://code.msdn.microsoft.com/windowsdesktop/Multiple-Document-059b96a8/file/106855/7/Multiple%20Document%20Interface%20(MDI)%20in%20WPF.zip

    Best Regards,

    Yohann Lu




    2016年10月18日 8:04
    版主
  • 抽空写了个示例,可以参考下https://github.com/aoi-umi/UmiAoi
    2016年10月26日 6:04