Имя изображения в виде строки, используйте его, чтобы сделать изображение видимым WPF с C # - PullRequest
0 голосов
/ 13 января 2012

У меня есть имя изображения в виде строки.Настоящее имя в форме называется «изображение».Итак, я получаю что-то вроде этого:

    image.Visibility = Visibility.Hidden;

string imageName = "image";
// need something here to make it usable...

changedImageName.Visibility = Visibility.Visible;

Теперь строку нельзя использовать в сочетании со свойством Visibility.Я не могу действительно найти то, что я должен сделать строку, чтобы сделать ее пригодной для использования свойство видимости.Если я вижу эту страницу: http://msdn.microsoft.com/en-us/library/system.windows.visibility.aspx Правильно ли я понимаю, что я делаю это "enum"?И если да, как я могу получить строку для этого свойства?

РЕДАКТИРОВАТЬ 1

Я вижу, что я не объяснял это достаточно правильно.Я забыл упомянуть, что я использую форму WPF.в этой форме я поместил изображение.

В инициализируемой части изображение скрыто.Так, например, имя изображения, которое я назвал «Изображение», поэтому позже я использую image.Visibility = Visibility.Hidden;

в своем коде, я хочу снова сделать изображение видимым, в зависимости от того, что делает пользователь.так что вместо того, чтобы просто использовать имя, чтобы изображение снова стало видимым, я хочу использовать строку.эта строка выглядит в точности как название изображения.но я не могу использовать строку в сочетании с функцией видимости.но я нигде не могу найти, к чему я должен сделать эту строку, чтобы иметь возможность использовать этот параметр видимости на нем.надеюсь, я объяснил немного лучше:).

Позже у меня будет несколько изображений в окне WPF.Таким образом, ключ в том, что я буду использовать строку, которая соответствует названию изображения.В зависимости от того, что пользователь ввел в строку, некоторое изображение будет или не будет отображаться.

РЕДАКТИРОВАТЬ 2

Если у вас есть:

String theName = ImageName.name

вы можете получить имя изображения в строку, чтобы вы могли с ним что-то делать.Я ищу способ сделать прямо противоположное этому.Итак, я хочу перейти от строки к этому имени, поэтому после этого я могу использовать это, чтобы снова управлять изображением.

Редактировать 3

некоторый пример:

        private void theButton_Click(object sender, RoutedEventArgs e)
        {

            //get the Name property of the button
            Button b = sender as Button;
            string s = b.Name;

            MessageBox.Show("this is the name of the clicked button: " + s);

            //the name of the image to unhide, is the exact same as the button, only with IM in front so:
            string IM = "IM";
            IM += s;

            MessageBox.Show("this string, is now indentical to the name of the image i want to unhide, so this string now looks like: " + IM );

            // now, this wont work, because i cant use a string for this, although the string value looks exactly like the image .name property
            // so string IM = IMtheButton
            // the image to unhide is named: IMtheButton.name
            IM.Visibility = Visibility.Visible;
}

Ответы [ 3 ]

1 голос
/ 13 января 2012

похоже, что вы используете WPF, поэтому вы можете создать преобразователь логического значения в видимость и использовать его с логическим значением (и создать метод, который получает строку, если необходимо) и просто использовать:

<ContentControl Visibility="{Binding Path=IsControlVisible, Converter={StaticResource BooleanToVisibilityConverter}}"></ContentControl>

или любой другой конвертер ...

проверьте ссылки: http://bembengarifin.wordpress.com/2009/08/12/setting-visibility-of-wpf-control-through-binding/

http://andu -goes-west.blogspot.com / 2009/05 / МОФ-булево к видимости-converter.html

http://msdn.microsoft.com/en-us/library/system.windows.controls.booleantovisibilityconverter.aspx

РЕДАКТИРОВАТЬ 1:

, поэтому вам придется перебирать изображения и проверять, совпадает ли ваша строка с именем класса Image.

как то так (не проверено):

foreach (Image img in container.Items)
{
    if img.Name == yourMagicallyString;
    {
        img.Visibility = Visibility.Visible;
    }
else 
    {
        img.Visibility = Visibility.Hidden;
    }
}
1 голос
/ 13 января 2012

Если я правильно понимаю, вы пытаетесь найти элемент управления на основе имени или идентификатора элемента управления. Если это так, попробуйте это:

Control changedImage = this.Controls.Find("image", false)[0];

В зависимости от того, на что вы нацеливаетесь и какую версию вам, возможно, придется немного подправить

РЕДАКТИРОВАТЬ Обновлено за @ Александр Галкин комментарии о Find возвращении массива. Определенно должны быть какие-то проверки и еще много чего, но я оставляю это до ОП.

РЕДАКТИРОВАТЬ 2 Чтобы узнать, как найти элемент управления по имени в WPF, .

0 голосов
/ 04 ноября 2015

Код, который я искал:

  object item = FindName(IM);
  Image test1 = (Image)item;
  test1.Visibility = Visibility.Visible;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...