我已经在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
属性?
答案 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;
}