我有一个动态创建的按钮,它已被单击,因此我们处于单击事件中,是在运行时创建的按钮。在click事件中,我创建了一个新按钮,并希望将发送者按钮替换为新按钮。
发件人位于MahApps.Metro Flyout的WrapPanel内(可能不相关的信息,但仅作详细说明。
总而言之:
用动态创建的myNewButton替换myOldButton(这是发送方按钮)。
替代地:
我真正想了解的是按钮内的iconPacks:PackIconMaterial图标的前台属性(请参见https://github.com/MahApps/MahApps.Metro.IconPacks)。如果有帮助的话,动态图标的x:Name可以从sender按钮的名称中派生,但是我似乎无法获得iconpacks图标的前台属性,这就是为什么我考虑将控件替换为就像原始按钮一样的新控件。这是动态创建的按钮:
// Create a stringBuilder
StringBuilder sb = new StringBuilder();
// use xaml to declare a button as string containing xaml
sb.Append(@"<Button xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'
xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
xmlns:iconPacks='http://metro.mahapps.com/winfx/xaml/iconpacks'
Width='85' Margin='4' Padding='3'>
<WrapPanel Margin='0'>
<iconPacks:PackIconMaterial Kind='BedEmpty' VerticalAlignment='Center' Foreground='Green'/>
<Label Content='dynamicBedName' FontSize='12'/>
<iconPacks:PackIconMaterial x:Name='dynamicIconName' Kind='RadioboxMarked' Height='12' Width='12'
Margin='0' Foreground='Green' VerticalAlignment='Center'/>
</WrapPanel >
</Button>");
//Replace the placeholder Button.Name
sb.Replace("dynamicBedName", thisBed);
//Replace the placeholder IconPacks:PackIconMaterial x:Name
string iconName = "icon" + thisBed;
sb.Replace("dynamicIconName", iconName);
// Create button using a XamlReader
Button myButton = (Button)XamlReader.Parse(sb.ToString());
//Replace placeholder Label on Button
myButton.Name = "_" + thisBed + "_btn";
//Add a ToolTip to each button specific to this button
myButton.ToolTip = thisBed;