2012-03-02 56 views
1

我创建了一个相当简单的UserControl,它由TextBoxComboBox组成。访问自定义控件中多个控件的文本和内容

<StackPanel Orientation="Horizontal">   
    <MyNamespace:MultiBox Style="{StaticResource PhoneBoxStyle}" BoxType="Phone" Grid.Column="0" Grid.Row="0" Name="phoneNumber" Margin="50,0,5,5" MinWidth="250"/> 
    <ComboBox Grid.Column="1" Grid.Row="0" Height="{Binding ElementName=phoneNumber, Path=Height}" MinWidth="100" Name="callResultsSelection" ItemsSource="{Binding Source={StaticResource callResults}}" Margin="0,0,5,5"/> 
</StackPanel> 

我需要能够然后使用一个按钮的按下导出这些的.Text & .SelectedItem值。我尝试使用下面的属性,但它似乎不工作。它确实通过控件的IntelliSense公开.Text属性,但它不会按照预期将任何内容复制到剪贴板。

原始(和所需的)的方法:

public string Text 
    { 
     get { return phoneNumber.Text + " - " + callResultsSelection.SelectedItem + "\r\n"; } 
     set { value = phoneNumber.Text + " - " + callResultsSelection.SelectedItem + "\r\n"; } 
    } 

回退的方法:

public string Text 
    { 
     get { return phoneNumber.Text; } 
     set { value = phoneNumber.Text; } 
    }   

    public string ComboBoxSelection 
    { 
     get { return callResultsSelection.SelectedItem.ToString(); } 
     set { value = callResultsSelection.SelectedItem.ToString(); } 
    } 

我使用的控制迭代如下。这些部分还有很多,但这是唯一相关的部分。

foreach (object o in ccChildren.GetChildren(tool, 3)) 
      { 
       if (o.GetType() == typeof(CallTemplate)) 
       { 
        CallTemplate template = (CallTemplate)o; 
        if (template.Text != null) 
        { 
         textBuffer += template.Text; 
        } 
        else 
        { 
         textBuffer = ""; 
        } 
        tempString += textBuffer; 
        textBuffer = ""; 
       } 
      } 

通过使用断点,我知道,它确实达到在if块的决策点,但即使VS识别CallTemplate对象,它不匹配。任何人都看到了问题?

编辑:我知道问题不在于迭代方法(ccChildren.GetChildren)。我使用这个与其他众多控件(文本框,组合框,单选按钮,复选框),它工作得很好。该领域唯一可能成为问题的是CallTemplate类型。

+1

在属性.Text @集{}你应该使用值,而不是分配它! – mrbm 2012-03-02 17:36:19

+0

else { textBuffer =“”; } 似乎是错的? – mrbm 2012-03-02 17:41:16

+0

我把值切换到等号的另一边,没有效果。至于textBuffer =“”,迭代的控件是一系列标签和文本框。在if块之前,该标签被添加到textBuffer中。但是,如果标签引用的控件为空,则标签不需要添加到tempString中,因此没有空行。 – 2012-03-02 17:49:04

回答

0

所以这将是纯粹愚蠢的时刻之一。我唯一的问题是我没有将包含UserControl的GroupBox添加到GroupBox的数组中以迭代。感谢有用的回复,虽然...

0

这是用户控制XAML

<UserControl x:Class="WpfApplication1.UserControl1" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     mc:Ignorable="d" 
     d:DesignHeight="300" d:DesignWidth="300"> 
<Grid> 
    <StackPanel> 
     <TextBox Grid.Column="0" Grid.Row="0" Name="phoneNumber" Margin="50,0,5,5" MinWidth="250"/> 
     <ComboBox Grid.Column="1" Grid.Row="0" Height="{Binding ElementName=phoneNumber, Path=Height}" MinWidth="100" Name="callResultsSelection" ItemsSource="{Binding stud}" DisplayMemberPath="Name" Margin="0,0,5,5"/> 
    </StackPanel> 

</Grid> 

这是用户控件

using System.Windows.Controls; 
using System.Collections.ObjectModel; 
namespace WpfApplication1 
{ 
    public partial class UserControl1 : UserControl 
    { 
     public UserControl1() 
     { 
      InitializeComponent(); 
      DataContext = this; 
      stud = new ObservableCollection<Student>(); 
      stud.Add(new Student() { Name = " chauhan", RollNo = 1212, About = "dc wecwedc wec cwec wevcwe vcwd vcwvc" }); 
      stud.Add(new Student() { Name = " chauhan", RollNo = 1212, About = "dc wecwedc wec cwec wevcwe vcwd vcwvc" }); 
      stud.Add(new Student() { Name = "chauhan", RollNo = 1212, About = "dc wecwedc wec cwec wevcwe vcwd vcwvc" }); 
      stud.Add(new Student() { Name = " chauhan", RollNo = 1212, About = "dc wecwedc wec cwec wevcwe vcwd vcwvc" }); 
      stud.Add(new Student() { Name = "chauhan", RollNo = 1212, About = "dc wecwedc wec cwec wevcwe vcwd vcwvc" }); 
     } 
     public ObservableCollection<Student> stud 
     { get; set; } 
     public string Text 
     { 
      get 
      { 
       return phoneNumber.Text + " - " + callResultsSelection.SelectedItem + "\r\n"; 
      } 
     } 
    } 
    public class Student 
    { 
     public string Name { get; set; } 
     public int RollNo { get; set; } 
     public string About { get; set; } 
    } 
} 

的代码隐藏这是窗口XAML其中上述用户控件用于

<Window x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 

    xmlns:uc="clr-namespace:WpfApplication1" 
    Title="MainWindow" Height="350" Width="525"> 
    <Window.Resources> 

    </Window.Resources> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"></RowDefinition> 
      <RowDefinition Height="*"></RowDefinition> 
     </Grid.RowDefinitions> 
     <uc:UserControl1 Grid.Row="0" x:Name="ucw"/> 
     <Button Click="Button_Click" Grid.Row="1"/> 
    </Grid> 
</Window> 

及以下一世s代码在窗口后面

using System.Windows; 
namespace WpfApplication1 
{ 
    public partial class MainWindow : Window 
    {  
     public MainWindow() 
     { 
      InitializeComponent(); 

      DataContext = this; 

     } 

     private void Button_Click(object sender, RoutedEventArgs e) 
     { 
      MessageBox.Show(ucw.Text); 
     } 
    } 
} 

这里,当我点击按钮时,usercontrol的Text属性在消息框中给出了正确的值。希望这会有所帮助。

相关问题