ControlsAndLayout控件及布局元素集
关注点:
1、 在Xml不同的两个顶级元素Category中分别作为两个ListBox主绑定源,怎样在2个主绑定源对应的1个从绑定源来说,当选择任意项时,从绑定源的DataContext怎么切换?
private void HandleSelectionChanged(object sender, SelectionChangedEventArgs args)
{
if (sender == null)
return;
Details.DataContext = (sender as ListBox).DataContext;
}
2、怎样在对Xaml进行编码时,同时执行xaml显示结果?
- 将字符串写入流Streamriter.Writer(string)。sw.Flush刷入到内存流ms。ms.Flush()??。
- XamlReader.Load(ms)读入xamls输入,并返回wpf对象作为根。把其作为元素添加到容器里。
protected void HandleTextChanged(object sender, TextChangedEventArgs me)
{
if (RealTimeUpdate) ParseCurrentBuffer();
}
private void ParseCurrentBuffer()
{
try
{
var ms = new MemoryStream();
var sw = new StreamWriter(ms);
var str = TextBox1.Text;
sw.Write(str);
sw.Flush();
ms.Flush();
ms.Position = 0;
try
{
var content = XamlReader.Load(ms);
if (content != null)
{
cc.Children.Clear();
cc.Children.Add((UIElement) content);
}
TextBox1.Foreground = Brushes.Black;
ErrorText.Text = "";
}
catch (XamlParseException xpe)
{
TextBox1.Foreground = Brushes.Red;
TextBox1.TextWrapping = TextWrapping.Wrap;
ErrorText.Text = xpe.Message;
}
}
catch (Exception)
{
// ignored
}
}
3、预览及代码区的切换及各占一般?
- 对RowDefinition的高度重新设置,哪块区隐藏就设置.Height=new GridLenght(0)。另一高设置new GridLength(1,GridUnitType.Star)。
- 各占一半就两个高度都设置GridLength(1,GridUnitType.Start)
protected void ShowPreview(object sender, RoutedEventArgs args)
{
PreviewRow.Height = new GridLength(1, GridUnitType.Star);
CodeRow.Height = new GridLength(0);
}
protected void ShowCode(object sender, RoutedEventArgs args)
{
PreviewRow.Height = new GridLength(0);
CodeRow.Height = new GridLength(1, GridUnitType.Star);
}
protected void ShowSplit(object sender, RoutedEventArgs args)
{
PreviewRow.Height = new GridLength(1, GridUnitType.Star);
CodeRow.Height = new GridLength(1, GridUnitType.Star);
}
4、Xpath规则:
- 示例中<XmlDataProvider x:Key="SamplesList" XPath="/Samples" Source="samples.xml" />表示文档元素Samples下所有元素。其xml中<Samples xmlns="" >
- DataContext="{Binding Source={StaticResource SamplesList}, XPath=/Samples/Category[1]/Sample}" ItemsSource="{Binding}"表示绑定到第一个<Category>分类下的所有<Sample>元素。
author
当前上下文中的所有 <author> 元素。
first.name
当前上下文中的所有 <first.name> 元素。
/bookstore
此文档的文档元素 ( <bookstore>)。
//author
文档中的所有 <author> 元素。
book[/bookstore/@specialty=@style]
style 属性值等于文档根处 <bookstore> 元素的 specialty 属性值的所有 <book> 元素。
author/first-name
作为 <author> 元素子级的所有 <first-name> 元素。
bookstore//title
<bookstore> 元素中一级或多级深度的所有 <title> 元素(任意后代)。 注意,此表达式不同于下一行中的表达式。
bookstore/*/title
作为 <bookstore> 元素的孙代的所有 <title> 元素。
bookstore//book/excerpt//emph
位于 <book> 元素的 <excerpt> 子级内任意位置和位于 <bookstore> 元素内任意位置的所有 <emph> 元素。
.//title
当前上下文中一级或多级深度的所有 <title> 元素。 注意,本质上只有这种情况需要句点表示法。
author/*
作为 <author> 元素子级的所有元素。
book/*/last-name
作为 <book> 元素孙级的 <last-name> 所有元素。
/
当前上下文的所有孙级元素。
*[@specialty]
具有 specialty 属性的所有元素。
@style
当前上下文的 style 属性。
price/@exchange
当前上下文中 <price> 元素上的 exchange 属性。
price/@exchange/total
返回空节点集,因为属性不包含元素子级。 XML 路径语言 (XPath) 语法允许使用此表达式,但是严格意义上讲无效。
book[@style]
当前上下文的具有 style 属性的 <book> 所有元素。
book/@style
当前上下文的所有 <book> 元素的 style 属性。
@*
当前元素上下文的所有属性。
./first-name
当前上下文节点中的所有 <first-name> 元素。 注意,此表达式等效于下一行中的表达式。
first-name
当前上下文节点中的所有 <first-name> 元素。
author[1]
当前上下文节点中的第一个 <author> 元素。
authorfirst-name
具有 <first-name> 子级的第三个 <author> 元素。
my:book
my 命名空间中的 <book> 元素。
my:*
my 命名空间中的所有元素。
@my:*
my 命名空间中的所有属性(不包括 my 命名空间中的元素的未限定属性)。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。