编辑数据模板中的属性

本文关键字:属性 数据 编辑 | 更新日期: 2023-09-27 17:49:41

我在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属性?

编辑数据模板中的属性

最后,我通过代码添加控件来实现它。我找不到别的办法。我是这样做的:

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;            
    }