如何在代码隐藏中的DataTemplate中获取TextBlock中的Text

时间:2017-05-05 15:31:04

标签: c# wpf accordion

我有一个Accordion Control,我绑定值并在DataTemplate中显示它们。 这就是我在用户控件中的含义:

<layoutToolkit:Accordion x:Name="MyAccordion">
<layoutToolkit:Accordion.ItemTemplate>
    <DataTemplate >
        <TextBlock x:Name="Header" Text="{Binding Header}"/>
    </DataTemplate>
</layoutToolkit:Accordion.ItemTemplate>
<layoutToolkit:Accordion.ContentTemplate>
    <DataTemplate>
        <StackPanel>
            <StackPanel Orientation="Horizontal">
                <TextBlock x:Name="Content" Text="{Binding Content}" />
            </StackPanel>
            <StackPanel Orientation="Horizontal">
                <Button x:Name="MyMethod" Content="Method" Click="MyMethod"/>
            </StackPanel>
        <StackPanel>
    </DataTemplate>
</layoutToolkit:Accordion.ContentTemplate>

我的绑定工作正常,现在我希望能够使用文本块中的文本应用于代码中的方法,但我希望值根据打开的Accordion而有所不同。 是否有可能实现这一目标?

这就是我的代码隐藏的方式:

        public MyUserCOntrol()
    {
        InitializeComponent();
        this.MyAccordion.SelectionMode = AccordionSelectionMode.ZeroOrOne;

        //method to fill the accordion
        this.MyAccordion.ItemsSource = MainWindow._RE.ListActionsParType;
    }

    public void MyMethod(object sender, EventArgs e)
    {
        string TxtBlockContent = ....;
        // so i can use this value in other operations
    }

我想创建一个方法(这里是我的myMethode),我将在按钮点击时应用该方法,并根据打开的手风琴使用此值

2 个答案:

答案 0 :(得分:0)

如果您需要获取DataTemplate中显示的TextBlock文本,那么您可以使用以下方式实现它,

//在XAML中使用的文本块中

var debug = process.env.NODE_ENV !== "production";
var webpack = require('webpack');

module.exports = {
  context: __dirname,
  devtool: debug ? "inline-sourcemap" : null,
  entry: "./src/scrable.js",
  output: {
    path: __dirname,
    filename: "bundle.js",
  },
  plugins: debug ? [] : [
    new webpack.optimize.DedupePlugin(),
    new webpack.optimize.OccurenceOrderPlugin(),
    new webpack.optimize.UglifyJsPlugin({ mangle: false, sourcemap: false }),
  ],
  module: {
    loaders: [
      { test: /\.css$/, loader: 'style-loader!css-loader' }
    ]
  }
};

//在代码隐藏

<TextBlock Loaded="Txt_Loaded">

只要将TextBlock加载到视图中,就会触发上述事件。因此,您可以像上面的代码一样在TextBlock中获取文本。

答案 1 :(得分:0)

使用“BindingContextChanged”事件来获取发件人(实际视图,TextBlock)。