在DataTemplate中编辑属性

时间:2014-03-12 16:59:43

标签: c# windows-phone-8 datatemplate

我已经在XAML中定义了这个:

<phone:PhoneApplicationPage.Resources>
    <DataTemplate x:Key="sendContentTemplate">
        <StackPanel>
            <TextBlock Name="P1Label" Text="1" Visibility="Collapsed" />
            <TextBox Name="P1" Visibility="Collapsed" />
            <TextBlock Name="P2Label" Text="2" Visibility="Collapsed" />
            <TextBox Name="P2" Visibility="Collapsed" />
            <TextBlock Name="P3Label" Text="3" Visibility="Collapsed" />
            <TextBox Name="P3" Visibility="Collapsed" />
        </StackPanel>
    </DataTemplate>
</phone:PhoneApplicationPage.Resources>

然后,在代码中,我以这种方式从Windows Phone Toolkit定义CustomMessageBox

DataTemplate contentTemplate = (DataTemplate)Resources["sendContentTemplate"];
SetVisibility(Contrato[0], contentTemplate);
var messageBox = new CustomMessageBox 
        {
            Caption = "Send",
            Message = "",
            ContentTemplate = contentTemplate,
            LeftButtonContent = "Send",
            RightButtonContent = "Close"
        };         
messageBox.Show();

我尝试修改代码中DataTemplate的属性,但没有成功。现在,我这样做:

private void SetVisibility(Contrato contrato, DataTemplate dataTemplate)
{
    var controls = AllChildren(dataTemplate.LoadContent());
    if (contrato.Number == 1)
    {
        controls.Find(c => c.Name == "P1Label").Visibility = Visibility.Visible;
        controls.Find(c => c.Name == "P1").Visibility = Visibility.Visible;            
    }
}

private List<FrameworkElement> AllChildren(DependencyObject parent)
{
    var list = new List<FrameworkElement>();
    for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
    {
        var child = VisualTreeHelper.GetChild(parent, i);
        if (child is FrameworkElement)
        {
            list.Add((FrameworkElement)child);
        }

        list.AddRange(AllChildren(child));
    }

    return list;
}

是否可以通过代码修改DataTemplate属性?

1 个答案:

答案 0 :(得分:1)

最后,我是通过代码添加控件来实现的。我无法找到另一种方法来做到这一点。 我是这样做的:

var messageBox = new CustomMessageBox {
        Caption = "Send",
        Message = "",
        Content =  CreateMessageBoxContent(c.T),
        LeftButtonContent = "Send",
        RightButtonContent = "Close"
    }; 


private static object CreateMessageBoxContent(string t)
    {
        var stackPanel = new StackPanel();
        var P1Label = new TextBlock {Text = AppResources.P1Label};
        var P2Label = new TextBlock {Text = AppResources.P2Label};
        var P3Label = new TextBlock {Text = AppResources.P3Label};

        var P1 = new TextBox();
        var P2 = new TextBox();
        var P3 = new TextBox();

            if (t == "T2" || t == "T20")
            {
                stackPanel.Children.Add(P1Label);
                stackPanel.Children.Add(P1);
            }
            else if (t =="T20D" || t == "T21D")
            {
                stackPanel.Children.Add(P1Label);
                stackPanel.Children.Add(P1);

                stackPanel.Children.Add(P3Label);
                stackPanel.Children.Add(P3);
            }
            else if (t == "T3" || t == "T31")
            {
                stackPanel.Children.Add(P1Label);
                stackPanel.Children.Add(P1);

                stackPanel.Children.Add(P2Label);
                stackPanel.Children.Add(P2);

                stackPanel.Children.Add(P3Label);
                stackPanel.Children.Add(P3);
            }
        return stackPanel;            
    }
相关问题