利用GridSplitter实现工具栏的自动隐藏

beyon_gq 2010-10-15 11:14:47
请教给位:现在页面分工具栏和显示栏,上下排列,如何实现点击工具栏的的GridSplitter自动隐藏工具栏,且显示画面对应放大
...全文
447 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
janjinyezi 2010-10-20
  • 打赏
  • 举报
回复
为什么我安装的Silverlight程序里没有StoryBoard控件和Memu控件啊
Sunpire 2010-10-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 beyon_gq 的回复:]
请教给位:现在页面分工具栏和显示栏,上下排列,如何实现点击工具栏的的GridSplitter自动隐藏工具栏,且显示画面对应放大
补充:再次点击工具栏的的GridSplitter,工具栏显现,显示画面对应缩小
[/Quote]

重复:用1楼的方式就可以
beyon_gq 2010-10-17
  • 打赏
  • 举报
回复
请教给位:现在页面分工具栏和显示栏,上下排列,如何实现点击工具栏的的GridSplitter自动隐藏工具栏,且显示画面对应放大
补充:再次点击工具栏的的GridSplitter,工具栏显现,显示画面对应缩小
Sunpire 2010-10-15
  • 打赏
  • 举报
回复
使用Grid面板,将显示栏的高度设为 * ,工具栏设为 Auto , 工具栏隐藏时,显示栏 自动就能获得最大化的效果。

但是,GridSplitter 在拖动了之后再隐藏/显示就很麻烦了,需要先记录隐藏/显示之前的一些实际高度。
dui_cky 2010-10-15
  • 打赏
  • 举报
回复

GridSplitter可以拖动行列大小。 如果需要隐藏的话
1、可以添加 Expander 控件。
2、可以使用动画效果 参考代码如下

xaml
<UserControl xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" x:Class="EasySL.UI.Page"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sCtrl="clr-namespace:EasySL.Controls;assembly=EasySL.Controls"
xmlns:localControl="clr-namespace:EasySL.UI.Controls"
>
<Grid x:Name="LayoutRoot" Background="White">
<Grid Background="#dfe8f6">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid Grid.ColumnSpan="2" Height="36">
<Image Source="Images/top_bg.png" Stretch="Fill"></Image>
<Image Source="Images/logo.png" Stretch="None" Opacity="0.7" HorizontalAlignment="Left" Margin="20,0,0,0"></Image>
</Grid>
<Grid Grid.ColumnSpan="2" Grid.Row="1" Height="26">
<Image Source="Images/topmenu_bg.png" Stretch="Fill"></Image>
<TextBlock x:Name="userInfo" Opacity="0.5" Margin="10,5,5,5"></TextBlock>
</Grid>
<Grid Grid.Row="2" Grid.Column="0" Margin="5">
<Border x:Name="leftPanel" Width="170" BorderBrush="#99bbe8" BorderThickness="1">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<Grid Height="26" Grid.Row="0">
<Image Source="Images/leftTitle_bg.png" Stretch="Fill"></Image>
<TextBlock Margin="6">Menu Panel</TextBlock>
<Image x:Name="expand" Source="Images/leftShow_icon.png" Stretch="None" Margin="3" HorizontalAlignment="Right" Opacity="0"></Image>
<Image x:Name="collapse" Source="Images/leftHide_icon.png" Stretch="None" Margin="3" HorizontalAlignment="Right" Opacity="1" Cursor="Hand"></Image>
</Grid>
<Border Height="1" Grid.Row="1" Background="#99bbe8" />
<Grid Grid.Row="2" Background="White" x:Name="leftMenuPanel">
<localControl:Menu x:Name="menu"></localControl:Menu>
</Grid>
</Grid>
</Border>
</Grid>
<Grid Grid.Row="2" Grid.Column="1" Margin="5">
<Border x:Name="rightPanel" BorderBrush="#99bbe8" BorderThickness="1">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<Grid Height="28">
<Image Source="Images/rightTitle_bg.png" Stretch="Fill"></Image>
<Border CornerRadius="3" Height="24" BorderBrush="#8db2e3" Margin="8,0,0,0" BorderThickness="1,1,1,0" HorizontalAlignment="Left">
<Border.Background>
<LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
<GradientStop Color="#ffffff" Offset="0"/>
<GradientStop Color="#deecfd" Offset="1"/>
</LinearGradientBrush>
</Border.Background>
<TextBlock Margin="3" VerticalAlignment="Top" x:Name="rightTitle">Operation Panel</TextBlock>
</Border>
</Grid>
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" BorderThickness="0">
<Grid x:Name="rightContent" />
</ScrollViewer>
</Grid>
</Border>
</Grid>
</Grid>
<localControl:Login x:Name="login"/>
</Grid>
<UserControl.Resources>
<Storyboard x:Name="hideMenu">
<DoubleAnimation Storyboard.TargetName="leftPanel" Storyboard.TargetProperty="Width" To="26" Duration="0:0:0.3"></DoubleAnimation>
<DoubleAnimation Storyboard.TargetName="collapse" Storyboard.TargetProperty="Opacity" To="0" Duration="0:0:0.1"></DoubleAnimation>
<DoubleAnimation Storyboard.TargetName="expand" Storyboard.TargetProperty="Opacity" To="1" Duration="0:0:0.5"></DoubleAnimation>
<DoubleAnimation Storyboard.TargetName="leftMenuPanel" Storyboard.TargetProperty="Opacity" To="0" Duration="0:0:0.2"></DoubleAnimation>
</Storyboard>
<Storyboard x:Name="showMenu">
<DoubleAnimation Storyboard.TargetName="leftPanel" Storyboard.TargetProperty="Width" To="170" Duration="0:0:0.3"></DoubleAnimation>
<DoubleAnimation Storyboard.TargetName="collapse" Storyboard.TargetProperty="Opacity" To="1" Duration="0:0:0.5"></DoubleAnimation>
<DoubleAnimation Storyboard.TargetName="expand" Storyboard.TargetProperty="Opacity" To="0" Duration="0:0:0.1"></DoubleAnimation>
<DoubleAnimation Storyboard.TargetName="leftMenuPanel" Storyboard.TargetProperty="Opacity" To="1" Duration="0:0:0.2"></DoubleAnimation>
</Storyboard>
</UserControl.Resources>
</UserControl>

cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using EasySL.Core;
using EasySL.Entity;
using System.Reflection;
using EasySL.Controls;
using EasySL.UI.Controls;


namespace EasySL.UI
{
public partial class Page : UserControl
{
public Page()
{
InitializeComponent();

this.collapse.MouseLeftButtonUp += new MouseButtonEventHandler(collapse_MouseLeftButtonUp);

this.menu.OnClick += new MouseButtonEventHandler(menu_OnClick);

this.login.OnLoginSuccess += new LoginSuccess(login_OnLoginSuccess);
}

void login_OnLoginSuccess(string userName)
{
this.userInfo.Text = string.Format("Current User: {0}, Login Time: {1}", userName, DateTime.Now);
}

void collapse_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
FrameworkElement fe = sender as FrameworkElement;
if (fe.Opacity == 1)
{
this.hideMenu.Begin();
}
else
{
this.showMenu.Begin();
}

}

#region left menu action

//When click the left menu, it'll create a right panel by menuitem's tag and reflection
void menu_OnClick(object sender, MouseButtonEventArgs e)
{
TreeViewItem element = sender as TreeViewItem;
this.rightTitle.Text = element.Header.ToString();
if (element.Tag != null)
{
string panelName = element.Tag.ToString();

if (panelName == "None")
{
EasySL.Controls.Window.Alert("This function hasn't implemented");
return;
}

UserControl panel = this.FindName(string.Format("RightContent_{0}", panelName)) as UserControl;
if (panel == null)
{
panel = this.CreatePanel(panelName);
panel.Name = string.Format("RightContent_{0}", panelName);
this.rightContent.Children.Add(panel);
}
else
{
this.rightContent.Children.Remove(panel);
this.rightContent.Children.Add(panel);
}
}
}


private UserControl CreatePanel(string panelName)
{
if (panelName != string.Empty)
{
Assembly executingAssembly = Assembly.GetExecutingAssembly();
foreach (Type type in executingAssembly.GetTypes())
{
if (type.Name.EndsWith(panelName))
{
UserControl panel = Activator.CreateInstance(type) as UserControl;
return panel;
}
}
}

return null;
}
#endregion


}
}

beyon_gq 2010-10-15
  • 打赏
  • 举报
回复
在Storyboard中设置hideMenu和showMenu两种方法,点GridSplitter 获得MouseLeftButtonDown方法
可以控制让工具栏先隐藏起来,但是让工具栏恢复,就是showMenu的方法怎么调用,

8,735

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧