Заменить (отправитель как кнопка) на myNewButton - PullRequest
0 голосов
/ 30 августа 2018

У меня есть динамически созданная кнопка, и она была нажата, поэтому мы находимся в событии click для кнопки, которая была создана во время выполнения. В рамках события click я создал новую кнопку и хочу заменить кнопку отправителя новой кнопкой.

Отправитель находится в WrapPanel в раскрывающемся списке MahApps.Metro (вероятно, не относящаяся к делу информация, но для уточнения.

Итак, в двух словах:

Замените myOldButton (который является кнопкой отправителя) на myNewButton, который создается динамически.

АЛЬТЕРНАТИВА:

Что я действительно пытаюсь получить, так это свойство переднего плана iconPacks: значок PackIconMaterial, который находится внутри кнопки (см. https://github.com/MahApps/MahApps.Metro.IconPacks). x: Имя динамического значка может быть получено из имени кнопка отправителя, если это полезно, но я не могу получить свойство foreground значка 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;
...