2017-01-27 1 views
2

Вот мой сценарий. Моя таблица имеет фиксированное количество столбцов, скажем, 2, и изначально она имеет только одну видимую строку, но когда фокус находится в последнем столбце строки 1, а пользователь нажимает «вкладку», строка 2 станет видимой.Изменение видимости строки с помощью взаимодействия с клавиатурой в приложении UWP

Моя проблема в том, что я не могу динамически выбирать строку, которую я хочу сделать видимой, потому что я должен указать ее x:Name во время компиляции.

Ниже приводится моя текущая работа.

.xaml файл

<StackPanel Orientation="Vertical"> 
    <StackPanel Orientation="Horizontal" x:Name="SP1"> 
     <TextBox Text="1-1"/> 
     <TextBox Text="1-2" KeyDown="showNextLine"/> 
    </StackPanel> 
    <StackPanel Orientation="Horizontal" x:Name="SP2" Visibility="Collapsed"> 
     <TextBox Text="2-1"/> 
     <TextBox Text="2-2"/> 
    </StackPanel> 
    <!--the remaining rows...--> 
</StackPanel> 

.cs файл

private int lastRowIndex = 1; 

private void showNextLine(object sender, KeyRoutedEventArgs e) 
{ 
    lastRowIndex++; 
    string nextLineName = "SP" + lastRowIndex.ToString(); 
    nextLineName.Visibility = Visibility.Visible; // which causes error because nextLineName is string instead of StackPanel 
} 

Кроме того, моя текущая реализация заключается в создании 50 строк и сделать последние 49 невидимы изначально, и я открыт для любого метода к Группируйте все TextBox более систематически или гибко.

Спасибо за чтение.

+0

При добавлении нового столбца, как о следующей строке? Он также добавляет столбец? Или столбец будет добавлен только в строку, которая сфокусирована и Tabbed? – AVK

+0

В каждой строке всегда есть фиксированное количество столбцов. В этом случае первая строка имеет два столбца, поэтому, когда вторая строка становится видимой, она также имеет два столбца. –

ответ

0

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

Вот словарь часть делается вручную:

Dictionary<int, StackPanel> myStackPanels = new Dictionary<int, StackPanel>(); 
myStackPanels.Add(1, SP1); 
myStackPanels.Add(2, SP2); 

Тогда вот что ShowNextLine будет выглядеть так:

private void showNextLine(object sender, KeyRoutedEventArgs e) 
{ 
    lastRowIndex++; 
    // Modify the StackPanel whose key is lastRowIndex; 
    myStackPanels[lastRowIndex] = Visibility.Visible; 
} 
+0

Кажется идеально для меня, позвольте мне попробовать. Кроме того, поскольку мне нужно 50 'StackPanel', вы знаете какой-либо метод для эффективного создания соответствующего кода XAML? –

2

Вы могли бы дать Родитель StackPanel в X: Имя или сохранить ссылку на него если вы создадите его динамически:

<StackPanel x:Name="root" Orientation="Vertical"> 
    <StackPanel Orientation="Horizontal" x:Name="SP1"> 
     <TextBox Text="1-1"/> 
     <TextBox Text="1-2" KeyDown="showNextLine"/> 
    </StackPanel> 
    <StackPanel Orientation="Horizontal" x:Name="SP2" Visibility="Collapsed"> 
     <TextBox Text="2-1"/> 
     <TextBox Text="2-2"/> 
    </StackPanel> 
    <!--the remaining rows...--> 
</StackPanel> 

... а затем получить ссылку на ac Хильд StackPanel используя свойство Дети и некоторые основные LINQ:

private void showNextLine(object sender, KeyRoutedEventArgs e) 
{ 
    lastRowIndex++; 
    string nextLineName = "SP" + lastRowIndex.ToString(); 
    StackPanel child = root.Children.OfType<StackPanel>().FirstOrDefault(x => x.Name == nextLineName); 
    if (child != null) 
     child.Visibility = Visibility.Visible; 
} 

Как я могу создать StackPanel динамически?

Как это:

var sp = new StackPanel { Name = "SP3", Orientation = Orientation.Horizontal, Visibility = Visibility.Collapsed }; 
sp.Children.Add(new TextBlock { Text = "3-1" }); 
var txt = new TextBlock() { Text = "3-2" }; 
txt.KeyDown += showNextLine; 
sp.Children.Add(txt); 
root.Children.Add(sp); 
+0

Как я могу создать StackPanel динамически? Я знаю только, что могу связать его во время работы. Спасибо за ответ. –

+0

См. Мой отредактированный ответ. – mm8

Смежные вопросы