2014-11-13 4 views
0

Я сталкиваюсь с проблемой в своем проекте, и у меня нет гораздо больше времени для проведения исследований.WPF «Скрыт» за панелью

Цель этого проекта - разрешить посещение тестов без физического присутствия.

Вы получаете файл, содержащий ваши тесты, вы посещаете их (ограниченное время) и отправляете обратно файл, содержащий ваши ответы.

Я получил текстовое поле в StackPanel, которое содержится в другой StackPanel.

Все элементы управления создаются программно.

Элементы управления добавлены правильно, но TextBox не реагирует на ввод мыши .... (на самом деле только тогда, когда текстовое поле является пункт аст и даже Ther только маленький последний пиксель)

UserControl XAML файл :

<UserControl x:Class="DataLibrary.View.Questions.ListQuestionInterface" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:localization ="clr-namespace:DataLibrary.Resources" 
      xmlns:convert ="clr-namespace:DataLibrary.View.Converters" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300" 
      Loaded="ListQuestionInterface_OnLoaded"> 
    <UserControl.Resources> 
     <localization:LocalizedStrings x:Key="LocalizedStrings"/> 
     <convert:getVisible x:Key="getVisible"/> 
     <convert:getText x:Key="getText"/> 
    </UserControl.Resources> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="10*"/> 
      <RowDefinition Height="40"/> 
     </Grid.RowDefinitions> 
     <StackPanel VerticalAlignment="Stretch" Orientation="Horizontal" x:Name="body" Grid.Row="0" FocusManager.IsFocusScope="True"/> 
     <Label Grid.Row="0" Margin="0,10,0,0" x:Name="explanations"/> 
     <Button Content="{Binding Path=type, Converter={StaticResource getText}}" 
       HorizontalAlignment="Right" 
       Margin="0,0,10,10" 
       VerticalAlignment="Bottom" 
       Grid.Row="1" 
       Width="120" 
       Height="20" 
       Click="DisplayAnswerButton_Click" 
       Visibility="{Binding Path=type, Converter={StaticResource getVisible}}"/> 
    </Grid> 
</UserControl> 

код за:

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

Я проверил некоторые вещи уже:

  • IsHitTestVisible никогда не устанавливается на ложный
  • Определение одного из stackpanels как FocusScope ничего
  • не изменится Если я поместить все мои контролей в холст и холст в стеке, я могу свободно нажимать на мои элементы управления, но их размещение полностью нарушено.
  • Фактическая ширина/высота элемент управления достаточно, чтобы взаимодействовать с ними (60x20)

Проблема, кажется, появилась только после того, как с помощью следующего trick, чтобы установить первый целенаправленный элемент на других UserControls (которые являются не в текущем VisualTree больше)

Мне действительно нужна помощь, так как я не могу найти кого-то с подобной проблемой.

А вот две картинки, чтобы проиллюстрировать эту проблему:

No response

Got it !

Черные стрелки показывает, где мой я щелкнул перед съемкой экрана (кстати, если вы знаете какой-либо программное обеспечение, которое может сделайте снимок экрана с помощью мыши, я беру его :))

+1

Это классический пример * почему * downvoters должны указывать причину. +1, чтобы противодействовать тому, кто ниспровергнут. Путь, ребята, - пугают новых людей. (Если вы хотите, чтобы новые сотрудники, которые понятия не имеют, что они делают, держите downvoting новых пользователей. Это наверняка достигнет желаемого эффекта во времени.) –

+0

В конце кода генерации refreshStackPanel() попробуйте позвонить this.InvalidateVisual(); this.UpdateLayout(); И скажите нам, разрешает ли она эту проблему. – Tony

+0

Просто протестировано, ничего не меняет – Sidewinder94

ответ

0

ОК, моя ошибка здесь -_- '

Я так устал, что я не видел, что моя стековая панель действительно была НАЙДЕНА Метка

В моем коде у меня было только 2 определения строк, в первом я положил стек стек и метку (кто взял все пространство).

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

Вот исправленный XAML:

<UserControl x:Class="DataLibrary.View.Questions.ListQuestionInterface" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:localization ="clr-namespace:DataLibrary.Resources" 
      xmlns:convert ="clr-namespace:DataLibrary.View.Converters" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300" 
      Loaded="ListQuestionInterface_OnLoaded"> 
    <UserControl.Resources> 
     <localization:LocalizedStrings x:Key="LocalizedStrings"/> 
     <convert:getVisible x:Key="getVisible"/> 
     <convert:getText x:Key="getText"/> 
    </UserControl.Resources> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="60*"/> 
      <RowDefinition Height="20*"/> 
      <RowDefinition Height="10*"/> 
     </Grid.RowDefinitions> 
     <StackPanel VerticalAlignment="Stretch" Orientation="Horizontal" x:Name="body" Grid.Row="0" FocusManager.IsFocusScope="True"/> 
     <Label Grid.Row="1" Margin="0,10,0,0" x:Name="explanations"/> 
     <Button Content="{Binding Path=type, Converter={StaticResource getText}}" 
       HorizontalAlignment="Right" 
       Margin="0,0,10,10" 
       VerticalAlignment="Bottom" 
       Grid.Row="2" 
       Width="120" 
       Height="20" 
       Click="DisplayAnswerButton_Click" 
       Visibility="{Binding Path=type, Converter={StaticResource getVisible}}"/> 
    </Grid> 
</UserControl> 

Таким образом, в самом деле, контроль действительно был скрыт за другим один -_-

теперь я знаю, что это не WPF способ сделать вещи, но я не знаю, еще как DataBind в шаблон правильно

Я все еще принимать какие-либо советы на хороший учебник/отправной точкой для связывания с DataTemplate в XAML, Тхо только DataBindings я мог найти, были для обязательные одиночные значения для управления свойствами

+1

Посмотрите на MVVM, например. http://stackoverflow.com/questions/1405739/mvvm-tutorial-from-start-to-finish или http://www.markwithall.com/programming/2013/03/01/worlds-simplest-csharp-wpf- mvvm-example.html или http://www.c-sharpcorner.com/UploadFile/ptmujeeb/wpf-mvvm-pattern-a-simple-tutorial-for-absolute-beginners/ и т. д. – BCdotWEB

+0

Спасибо, я буду уверен посмотреть :) – Sidewinder94

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