2009-10-19 8 views
5

Mam okno WPF, które ma ToolBar. Mam zbiór obiektów w mojej maszynie wirtualnej, do których się zobowiązuję. Pojawiają się one jako przyciski, ale zawsze są popychane do rozwiniętej rozwijanej części ToolBar. Jak ustawić te przyciski w standardowej części ToolBar?Jak uzyskać pasek narzędzi WPF do powiązania z kolekcją w mojej maszynie wirtualnej bez korzystania z ekspandera

Mam następujące XAML:

<ToolBarTray Grid.Row="1"> 
    <ToolBar ItemsSource="{Binding Path=MyList}" > 
     <ToolBar.ItemTemplate> 
      <DataTemplate > 
       <Button ToolTip="{Binding ButtonName}" 
         Command="{Binding Path=ButtonCommand}" > 
        <Button.Content> 
         <Image Width="32" Height="32" Source="{Binding ImageSource}"/> 
        </Button.Content> 
       </Button> 
      </DataTemplate> 
     </ToolBar.ItemTemplate> 
    </ToolBar> 
</ToolBarTray> 

Mam następujący C#:

public List<MyClass> MyList 
    { 
     get 
     { 
      return new List<MyClass> 
         { 
          new MyClass{ButtonName="Button1",[email protected]"C:\Projects\WpfApplication2\WpfApplication2\Employee.png"}, 
          new MyClass{ButtonName="Button2",[email protected]"C:\Projects\WpfApplication2\WpfApplication2\Employee.png"}, 
          new MyClass{ButtonName="Button3",[email protected]"C:\Projects\WpfApplication2\WpfApplication2\Employee.png"}, 
          new MyClass{ButtonName="Button4",[email protected]"C:\Projects\WpfApplication2\WpfApplication2\Employee.png"}, 
         }; 

     } 
    } 

To efekt wizualny:

alt text

+0

Jeśli podam pasek narzędzi o statycznej szerokości 500, ten sam efekt wizualny się stanie –

+0

Czy mógłbyś być bardziej konkretny? – Shimmy

+0

@Shimmy, nie sądzę, że mogę być bardziej konkretny, ale spróbuję. Chcę, aby te przyciski, które mam na moim pasku narzędzi, pojawiały się w standardowej (niezapełnionej) części paska narzędzi. –

Odpowiedz

4

Jest to błąd w pasek narzędzi, jeśli zmienisz rozmiar okna, problem zniknie.

Rozwiązaniem jest użycie innej kontroli, takich jak:

public class WorkaroundToolBar : ToolBar 
{ 
    private delegate void IvalidateMeasureJob(); 

    public override void OnApplyTemplate() 
    { 
     Dispatcher.BeginInvoke(new IvalidateMeasureJob(InvalidateMeasure), 
            DispatcherPriority.Background, null); 
     base.OnApplyTemplate(); 
    } 
} 

Odjazd this thread uzyskać więcej informacji

+0

Niestety, to nie zadziałało. Masz jednak rację, kiedy zmieniam rozmiar ekranu, przyciski pojawiają się zgodnie z oczekiwaniami. –

+0

Działa w mojej maszynie, wypróbuj tę próbkę barebones Zrobiłem http://www.bizcacha.com/public/WpfApplication3.rar –

+0

To rozwiązanie również nie działa bezpośrednio dla mnie. Nie sprawdziłem jednak dostarczonej próbki. – Oskar

1

Można również ustawić wysokość paska narzędzi w XAML do rozsądnych wartości, który pracował dla mnie.

1

Aby dodać do Eduardo'S, musiałem lekko podkręcić to ponieważ moje źródło element był już zaludnione asynchronicznie, jakiś czas po wyświetleniu początkowy Ui:

public class ToolBar : System.Windows.Controls.ToolBar 
{ 
    public override void OnApplyTemplate() 
    { 
     Dispatcher.BeginInvoke ((Action)(InvalidateMeasure), DispatcherPriority.Background, null); 
     base.OnApplyTemplate(); 
    } 
    protected override void OnItemsChanged (NotifyCollectionChangedEventArgs e) 
    { 
     base.OnItemsChanged (e); 
     Dispatcher.BeginInvoke ((Action)(InvalidateMeasure), DispatcherPriority.Background, null); 
    } 
} 

To wystarczyło, aby złapać wszystkie przypadki brzegowe i mieć przepełnienie odpowiednio odbywa się w razie potrzeby po populacji przedmiotów.

Powiązane problemy