ControlsAndLayout控件及布局元素集

clipboard.png

关注点:
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显示结果?

clipboard.png

  1. 将字符串写入流Streamriter.Writer(string)。sw.Flush刷入到内存流ms。ms.Flush()??。
  2. 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、预览及代码区的切换及各占一般?

  1. 对RowDefinition的高度重新设置,哪块区隐藏就设置.Height=new GridLenght(0)。另一高设置new GridLength(1,GridUnitType.Star)。
  2. 各占一半就两个高度都设置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规则:

  1. 示例中<XmlDataProvider x:Key="SamplesList" XPath="/Samples" Source="samples.xml" />表示文档元素Samples下所有元素。其xml中<Samples xmlns="" >
  2. 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 命名空间中的元素的未限定属性)。


李志玮
22 声望34 粉丝

求索~~


引用和评论

0 条评论