2011-01-11 15 views
34

mam kontrolę użytkownika, nazywają go UserControl, która posiada siatkę z następujących definicji kolumna:Grid SharedSizeGroup i * zaklejania

<Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto" SharedSizeGroup="A"/> 
      <ColumnDefinition Width="Auto" SharedSizeGroup="B"/> 
      <ColumnDefinition Width="*" SharedSizeGroup="C"/> 
      <ColumnDefinition Width="Auto" SharedSizeGroup="D"/> 
      <ColumnDefinition MinWidth="30" Width="*" SharedSizeGroup="E"/> 
      <ColumnDefinition MinWidth="30" Width="*" SharedSizeGroup="F"/> 
      <ColumnDefinition Width="110" SharedSizeGroup="G"/> 
      <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="H"/> 
      <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="I"/> 
      <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="J"/> 
      <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="K"/> 
      <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="L"/> 
</Grid.ColumnDefinitions> 

Mam też MainWindow, który zawiera samą siatkę, o następującej własności określona na siatce:

Grid.IsSharedSizeScope="True" 

teraz dodano kilka UserControls do sieci w MainWindow (każdy w oddzielnym rzędzie). Moim celem jest utrzymanie synchronizacji każdej z szerokości kolumn różnych kontrolek UserControl. Wszystko działa poprawnie podczas korzystania z SharedSizeGroup, z wyjątkiem jednej rzeczy. Wygląda na to, że każda kolumna o szerokości * nie zachowuje się tak, jak powinna. Wygląda na to, że szerokości kolumn * są ustawione tak, jakby były automatycznie.

Czy są jakieś ograniczenia/problemy dotyczące SharedSizeGroup i * rozmiaru? Wydaje się to najlepszym sposobem na zsynchronizowanie szerokości kolumn, ale nie mogę tego naprawić.

Dzięki.

Odpowiedz

46

MSDN:

kolumn i wierszy, które uczestniczą w wielkości podziału nie szanują zodiaku rozmiaru. W scenariuszu wielkość podziału, zaklejania Gwiazda jest traktowany jako Auto

Jeśli używasz gwiazdę następnie wszystkie kolumny będą mieć tę samą szerokość, więc należy przypisać tę samą SharedSizeGroup wszystkim, jeśli nie przeszkadza Auto- aspekt wielkości:

<Grid.ColumnDefinitions> 
    <ColumnDefinition Width="Auto" SharedSizeGroup="A"/> 
    <ColumnDefinition Width="Auto" SharedSizeGroup="B"/> 
    <ColumnDefinition Width="*" SharedSizeGroup="StarDontWork"/> 
    <ColumnDefinition Width="Auto" SharedSizeGroup="D"/> 
    <ColumnDefinition MinWidth="30" Width="*" SharedSizeGroup="StarDontWork"/> 
    <ColumnDefinition MinWidth="30" Width="*" SharedSizeGroup="StarDontWork"/> 
    <ColumnDefinition Width="110" SharedSizeGroup="G"/> 
    <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="H"/> 
    <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="I"/> 
    <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="J"/> 
    <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="K"/> 
    <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="L"/> 
</Grid.ColumnDefinitions> 

(Od tego zachowania wynika również, że można upuszczać właściwość Width gdy SharedSizeGroup jest ustawiony)


Można wywnioskować, że jeśli wszystkie kolumny z automatycznym sortowaniem znajdują się we wspólnych grupach rozmiarów, wszystkie kolumny o rozmiarach gwiazd będą miały te same rozmiary, ponieważ każda siatka w zakresie będzie miała taką samą ilość niewykorzystanego miejsca, które zostanie rozdzielone do rozmiaru gwiazdy kolumny.

Prosty przykład:

<Grid.ColumnDefinitions> 
    <ColumnDefinition SharedSizeGroup="A"/> 
    <ColumnDefinition SharedSizeGroup="B" Width="*"/> 
    <ColumnDefinition SharedSizeGroup="C"/> 
</Grid.ColumnDefinitions> 

Jak wyjaśnił Width="*" nic nie da, ale jak kolumny 0 i 2 są zsynchronizowane, kolumna 1 musi być zsynchronizowane, jak również tak można po prostu upuść SharedSizeGroup:

<Grid.ColumnDefinitions> 
    <ColumnDefinition SharedSizeGroup="A"/> 
    <ColumnDefinition Width="*"/> 
    <ColumnDefinition SharedSizeGroup="C"/> 
</Grid.ColumnDefinitions> 
+0

Dzięki za link. Niestety, ustawienie * kolumn do użycia innej SharedSizeGroup spowoduje, że wszystkie te kolumny będą miały zsynchronizowane szerokości (co jest oczekiwane), ale nie tego, czego szukam. Potrzebuję zsynchronizować każdą szerokość kolumny indywidualnie. – Flack

+0

To, co zaproponowałem, to * dokładnie to, co gwiazda by normalnie robiła *, nie dostaję tego, czego chcesz ... –

+2

Bądź ostrożny z tym. Moja aplikacja, nie robiąc nic, pochłonęła 100% jednego rdzenia procesora z tego powodu. Jak tylko usunąłem "SharedSizeGroup", zużywa ona 0 zgodnie z oczekiwaniami. – AlexeiOst