五、Stack和Wrap
1 类继承图
UIElemnet
FrameworkElement
Pannel(抽象类)
Canvas
DockPanel
Grid
StackPanel
UniformGrid(网格中所有单元格大小相同)
WrapPannel(和StackPannel类似,但可以让子元素放在下一行或列)
Pancel定义了Children,类型是UIElementCollection, 用 Children.Add()增加子元素
2 StackPannel
2.1 向StackPannel中添加元素
默认子元素的排列方式为垂直方向,statck.Orientation = Orientation.Horizontal;//设置水平放置
FrameworkElement定义了FindName方法 eg:Button btn = FindName["XXX"] as Button;
注:在事件处理器中获取产生事件的对象
Button btn = sender as Button; 或 Button btn = args.Source as Button;
![](/Images/OutliningIndicators/ContractedBlock.gif)
示例:向StackPannel中添加元素
示例:向StackPannel中添加元素
namespace Petzold.StackThirtyButtons
{
class StackThirtyButtons : Window
{
[STAThread]
public static void Main()
{
Application app = new Application();
app.Run(new StackThirtyButtons());
}
public StackThirtyButtons()
{
Title = "Stack Thirty Buttons";
SizeToContent = SizeToContent.WidthAndHeight;
ResizeMode = ResizeMode.CanMinimize;
// 注意:设置所以的按钮的单击事件,执行ButtonOnClick
AddHandler(Button.ClickEvent, new RoutedEventHandler(ButtonOnClick));
StackPanel stackMain = new StackPanel();
stackMain.Orientation = Orientation.Horizontal;
stackMain.Margin = new Thickness(5);
Content = stackMain;
for (int i = 0; i < 3; i++)
{
StackPanel stackChild = new StackPanel();
stackMain.Children.Add(stackChild);
for (int j = 0; j < 10; j++)
{
Button btn = new Button();
btn.Content = "Button No. " + (10 * i + j + 1);
btn.Margin = new Thickness(5);
stackChild.Children.Add(btn);
}
}
}
void ButtonOnClick(object sender, RoutedEventArgs args)
{
// args.Source as Button,取得触发事件的元素
MessageBox.Show("You clicked the button labeled " +
(args.Source as Button).Content);
}
}
}
2.2 ScrollView
可以显示滚动条
scroll.HorizontalScrollBarVisibility = ScrollBarVisibility.Visible;// 设置水平滚动条可见
scroll.VerticalScrollBarVisibility = ScrollBarVisibility.Visible; // 设置垂直滚动条可见
2.3 ViewBox
使用 ViewBox 做容器,不显示滚动条,而是缩放容器中的子元素。
Viewbox view = new Viewbox();
Content = view;
view.Child = stack; //缩放stack及其中的子元素
2.4 GroupBox
![](/Images/OutliningIndicators/ContractedBlock.gif)
示例:用GroupBox中的Radio Button改变窗口的WindowStyle
namespace Petzold.TuneTheRadio
{
public class TuneTheRadio : Window
{
[STAThread]
public static void Main()
{
Application app = new Application();
app.Run(new TuneTheRadio());
}
public TuneTheRadio()
{
Title = "Tune the Radio";
SizeToContent = SizeToContent.WidthAndHeight;
GroupBox group = new GroupBox();
group.Header = "Window Style";
group.Margin = new Thickness(96);
group.Padding = new Thickness(5);
Content = group;
StackPanel stack = new StackPanel();
group.Content = stack;
stack.Children.Add(
CreateRadioButton("No border or caption",
WindowStyle.None));
stack.Children.Add(
CreateRadioButton("Single-border window",
WindowStyle.SingleBorderWindow));
stack.Children.Add(
CreateRadioButton("3D-border window",
WindowStyle.ThreeDBorderWindow));
stack.Children.Add(
CreateRadioButton("Tool window",
WindowStyle.ToolWindow));
AddHandler(RadioButton.CheckedEvent,
new RoutedEventHandler(RadioOnChecked));
}
RadioButton CreateRadioButton(string strText, WindowStyle winstyle)
{
RadioButton radio = new RadioButton();
radio.Content = strText;
radio.Tag = winstyle;
radio.Margin = new Thickness(5);
radio.IsChecked = (winstyle == WindowStyle);
return radio;
}
void RadioOnChecked(object sender, RoutedEventArgs args)
{
RadioButton radio = args.Source as RadioButton;
WindowStyle = (WindowStyle)radio.Tag;
}
}
}
注:FileSystemInfo info;
info is FileInfo; //判断是否是文件
info is DirectoryInfo //判断是否是目录
关于文件类的操作,参考“C#对文件和目录的操作”