W oknie, które mam, znajduje się lista DockPanel
s, aby określić kilka plików. Każdy DockPanel ma TextBox (dla ścieżki) i przycisk (aby wyszukać plik).Pierwsze dziecko z Dockpanela używa pozostałej przestrzeni.
Mam odtworzone prostą stronę WPF do demostrate tu problem:
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="150"
Height="22">
<DockPanel>
<TextBox HorizontalAlignment="Stretch"/> <!-- path to file -->
<Button Content="..." DockPanel.Dock="Right"/> <!-- button to browse for file -->
</DockPanel>
</Page>
Problem polega na tym, że chcę przycisk po prawej stronie pola tekstowego, ale to powoduje, że pole tekstowe, aby być naprawdę małe, ponieważ LastChild of DockPanel to przycisk, który zużywa pozostałą przestrzeń. Ive starał się to zmienić, przesuwając je wokół i ustawiając LastChildFill="False"
, ale to tylko powoduje, że przycisk jest ponownie mały, nie czyniąc TextBox szeroki (nawet z HorizontalAlignment="Stretch"
).
Powód, dla którego chcę, aby kontrolki w tej kolejności były, chcę, aby użytkownik dotarł do TextBox przed przyciskiem, gdy używasz tab
do nawigacji w oknie. Spojrzałem na ustawienie TabIndex
, ale czuję się hacky, ulubionymi cechami WPF jest to, że tabindex są w kolejności, w której konflikty są zdefiniowane w XAML. Nie wspominając, że prawdopodobnie musiałbym ręcznie ustawić TabIndex na wszystko w oknie.
Wydaje mi się, że ustawienie TextBox.HorizontalAlignment nie jest przestrzegane. W jaki sposób mogę sprawić, by pierwsza kontrola używała tyle miejsca, ile jest w stanie, ale zachowała kolejność kart?
+1, ponieważ nie mają TabOrder problem. Jeśli ktoś chce uniknąć wpisywania ColumnDefinitions w takich prostych scenariuszach, spójrz na to rozwiązanie: http://rachel53461.wordpress.com/2011/09/17/wpf-grids-rowcolumn-count-properties/ – surfen