用myNewButton替换(作为按钮发送)

时间:2018-08-30 05:11:58

标签: c# wpf xaml wpf-controls mahapps.metro

我有一个动态创建的按钮,它已被单击,因此我们处于单击事件中,是在运行时创建的按钮。在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;

0 个答案:

没有答案