2010-05-24 5 views
0

Je suis probablement trop faire un problème très simple, mais c'est ce que j'ai un moment:WPF Déplacement problème Élément

J'ai plusieurs boutons et une zone de liste des éléments dans lesquels l'utilisateur peut sélectionner et d'interagir avec . Mon application déplace également ces éléments en fonction de la largeur/hauteur de l'application, comme suit:

listBox1.Margin = new Épaisseur (this.ActualWidth * 0.84, this.ActualHeight * 0.3, 0, 0);

Je suis capable de sélectionner les éléments dans la liste et de cliquer sur les boutons de manière appropriée en mode fenêtré, mais comme je commence à agrandir l'application, j'essaie de cliquer sur les éléments, et je ne peux pas le faire. ceci parce que j'ai aussi besoin de mettre à jour leurs rectangles de détection d'impact? Ou peut-être que je déplace les articles de manière incorrecte? Je suis à perte .. toute information serait très utile à ce stade ... merci!

+0

Quel est le comportement attendu lorsque votre application "déplace ces éléments"? Je ne comprends pas pourquoi vous essayez de changer l'épaisseur de la marge de votre ListBox. Peut-être cherchez-vous la propriété .Width? – TreDubZedd

+0

Le comportement prévu pour cette application serait que j'ai un écran avec des boutons et une zone de liste, et que je redimensionne la fenêtre de l'application, les boutons et la liste déroulante se déplace en fonction de la taille de la fenêtre. La position réelle de la liste et des boutons bouge. Je l'ai fait avec le code précédent, mais après ils sont déplacés, il n'est plus possible de sélectionner quoi que ce soit dans la listbox, ni les boutons .. Je pense que la détection de hit pour ces items n'est pas mise à jour selon leurs nouvelles positions, donc j'ai essayé les fonctions de mise à jour manuelle, et n'ai pas encore de succès ... – Kyle

+0

Oui, vous avez raison, je veux simplement que la listbox bouge dans les directions x/y en fonction de la largeur/hauteur de la fenêtre a la fonctionnalité de sa classe (c.-à-d. listbox/bouton) Par exemple, comme je redimensionne la fenêtre, je veux que la position de la liste soit à 30% de la largeur de la fenêtre .. donc je dis listbox.Margin.Left = app. Largeur réelle * 0,30; Je l'ai fait fonctionner, mais comme je redimensionne la fenêtre de l'application et essayez d'utiliser les boutons/listbox, leur fonctionnalité se détériore. Je perds la possibilité de sélectionner des éléments dans ma listbox, et les retours de détection de hit de bouton semblent être "off". – Kyle

Répondre

0

Vous ne savez pas pourquoi vous ne pouvez plus cliquer sur les éléments après le redimensionnement. Cela peut avoir beaucoup de raisons. Évidemment, vous voulez avoir des marges proportionnelles autour de la ListBox. Vous le feriez normalement faire avec une grille:

<Grid> 
    <Grid.ColumnDefinitions> 
    <ColumnDefinition Width="0.83*"/> 
    <ColumnDefinition/> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
    <RowDefinition Height="0.3*"/> 
    <RowDefinition/> 
    </Grid.RowDefinitions> 
    <ListBox x:Name="listBox1" Grid.Column="1" Grid.Row="1"/> 
</Grid> 
0

J'écris cette XAML:

<Window x:Class="StackOverflow_MovingProblem.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="*" /> 
      <RowDefinition Height="Auto" /> 
     </Grid.RowDefinitions> 
     <ListBox Name="listbox1" ItemsSource="{Binding Path=list}" /> 
     <StackPanel Grid.Row="1" Orientation="Horizontal"> 
      <Button Content="button1" /> 
      <Button Content="button2" /> 
      <Button Content="button3" /> 
     </StackPanel> 
    </Grid> 
</Window> 

avec ce code-behind:

public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 

      DataContext = this; 

      SizeChanged += new SizeChangedEventHandler(MainWindow_SizeChanged); 

      list = new ObservableCollection<string>(); 
      list.Add("item1"); 
      list.Add("item2"); 
      list.Add("item3"); 
     } 

     public ObservableCollection<string> list { get; set; } 

     void MainWindow_SizeChanged(object sender, SizeChangedEventArgs e) 
     { 
      listbox1.Margin = new Thickness(this.ActualWidth * 0.84, 
              this.ActualHeight * 0.3, 0, 0); 
     } 
    } 

mais je ne suis pas en mesure de reproduire votre problème. Vérifiez mon code s'il y a quelque chose de différent avec votre code et dites-moi quoi, donc je peux vous donner quelques conseils. Merci

+0

Hm, le code semble juste .. laissez-moi aller de l'avant et de comparer et de tester plus .. Je reviendrai avec vous .. – Kyle

+0

Je l'ai essayé en utilisant vos paramètres, mais essayez ceux-ci: nouvelle Épaisseur (this.ActualWidth * 0,411, this.ActualHeight * 0,435, 0, 0); Cela fonctionne très bien lorsque j'utilise vos paramètres, mais sous ceux-ci, vous verrez peut-être le problème. Oh, et la hauteur et la largeur de la fenêtre de l'application pour moi est: hauteur = 768, largeur = 1024 – Kyle

Questions connexes