Tôi muốn thay đổi nội dung của bề mặt chính (chính dưới chính ribbon) trong ứng dụng WPF khi nhấn vào tab ribbon. Tôi đang sử dụng ruy-băng văn phòng, điều đó không quan trọng lắm. Vì vậy, WPF container kiểm soát tôi nên sử dụng, và làm thế nào tôi sẽ làm điều đó? Tôi có nên có các điều khiển khác nhau với khả năng hiển thị ẩn hay không. Tôi không phải là một chuyên gia WPF vì vậy tôi cần một chút cảm hứng.Ribbon WPF, thay đổi nội dung chính khi ribbontab được chọn
Trả lời
Lời nói đầu của tôi bằng cách nói rằng tôi nghi ngờ đây là cách tốt nhất để thực hiện việc này.
Đây là phong cách của tôi cho RibbonTab nhận thấy IsSelected là ràng buộc để IsSelected trong Mô hình xem
<!-- RibbonTab -->
<Style TargetType="{x:Type ribbon:RibbonTab}">
<Setter Property="ContextualTabGroupHeader" Value="{Binding ContextualTabGroupHeader}" />
<Setter Property="Header" Value="{Binding Header}" />
<Setter Property="ItemsSource" Value="{Binding GroupDataCollection}" />
<Setter Property="IsSelected" Value="{Binding IsSelected}" />
</Style>
Đây là quan điểm mô hình mã
public bool IsSelected
{
get
{
return _isSelected;
}
set
{
if (_isSelected != value)
{
_isSelected = value;
OnPropertyChanged(new PropertyChangedEventArgs("IsSelected"));
}
}
}
private bool _isSelected;
Trong constructor cho TabViewModel Tôi lấy một tham số cho ViewModel của nội dung
public TabData(ISelectedContentTab content)
: this(content.DisplayName)
{
_selectedContent = content;
}
private ISelectedContentTab _selectedContent;
Sau đó, tôi đã sử dụng một ItemsCon trol để hiển thị các nội dung được lựa chọn trong XAML của tôi
<ItemsControl Grid.Row="1" VerticalContentAlignment="Stretch" VerticalAlignment="Stretch"
ItemsSource="{Binding ElementName=ribbon,Path=SelectedItems}"
ItemTemplate="{StaticResource ContentControlTemplate}" />
Và ContentControlTemplate tôi có là
<DataTemplate x:Key="ContentControlTemplate">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<ContentControl Grid.Row="0" VerticalAlignment="Stretch" Height="Auto" VerticalContentAlignment="Stretch" Content="{Binding SelectedContent}" />
</Grid>
</DataTemplate>
Ngoài ra hãy chắc chắn rằng bạn có một datatemplate chỉ nội dung của bạn đến một cái nhìn
Hope this helps.
Vui lòng cung cấp thêm chi tiết! Những đoạn mã này không đủ để làm cho ngày của tôi :) – l33t
Tôi biết đây là một chủ đề cũ hơn, nhưng tôi đã gặp vấn đề với điều này và không tìm thấy bất kỳ trợ giúp vb.net nào, nhưng tôi đã tự khám phá ra một giải pháp ...
Đặt tên RibbonTab của bạn để bạn có thể xử lý nó trong mã phía sau. Tôi biết có nhiều cách để thêm chế độ xem và điều khiển, nhưng dưới đây là những gì tôi đã làm ... Tôi chỉ cần thêm lưới mới cho chế độ xem của mình trong Lưới chính sau ruy-băng. ví dụ:
<r:RibbonWindow>
<Grid>
<r:Ribbon>
<r:RibbonTab Name="Tab1" Header="Home">
<r:RibbonGroup Name="Group1">
<r:RibbonButton LargeImageSource="images\icon.png" Label="Click Me"/>
</r:RibbonGroup>
</r:RibbonTab>
<r:RibbonTab Name="Tab2" Header="Other Tab">
<r:RibbonGroup Name="Group2">
<r:RibbonButton LargeImageSource="images\icon.png" Label="Click Me"/>
</r:RibbonGroup>
</r:RibbonTab>
</r:Ribbon>
<Grid Name="Tab1RTB" Grid.Row="1" Visibility="Hidden">
<RichTextBox Margin="5" BorderBrush="LightGray" BorderThickness="1"/>
</Grid>
<Grid Name="Tab2RTB" Grid.Row="1" Visibility="Hidden">
<RichTextBox Margin="5" BorderBrush="LightGray" BorderThickness="1"/>
</Grid>
</Grid>
</r:RibbonWindow>
Sau đó, các mã sau (VB.NET)
Private Sub TabChanged(sender As System.Object, e As SelectionChangedEventArgs) Handles ribbonHome.SelectionChanged
If Tab1.IsSelected = True Then
Tab1RTB.Visibility = Windows.Visibility.Visible
Tab2RTB.Visibility = Windows.Visibility.Collapsed
ElseIf Tab2.IsSelected = True
Tab1RTB.Visibility = Windows.Visibility.Collapsed
Tab2RTB.Visibility = Windows.Visibility.Visible
Else
Tab1RTB.Visibility = Windows.Visibility.Collapsed
Tab2RTB.Visibility = Windows.Visibility.Collapsed
End If
End Sub
Tôi đoán có một cách đơn giản hơn để làm điều đó. Tôi đã thực hiện nó như thế này:
<Frame NavigationUIVisibility="Hidden" x:Name="FrmMainFrame" DockPanel.Dock="Bottom"/>
Và trong mã của bạn đằng sau:
mainWindowView.RibMain.SelectionChanged += RibMain_SelectionChanged;
void RibMain_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
{
var tab = this.mainWindowView.RibMain.SelectedItem as RibbonTab;
if (tab.Header.Equals("Explorer"))
{
mainWindowView.FrmMainFrame.Navigate(explorerController.View());
}
else
mainWindowView.FrmMainFrame.NavigationService.Navigate(new Uri("http://www.google.com/"));
}
Ý tưởng là để có nội dung dưới đây ruy băng xếp chồng lên nhau trong lớp, (như trong Photoshop hoặc bất kỳ trình soạn đồ họa khác) và chỉ hiển thị lớp bạn cần thời điểm này. Chỉ cần gắn Visibility
của lớp của bạn để IsSelected
tài sản của tab mong muốn
MainGrid đây là một container cho các lớp (trong đó có lưới quá):
<Grid x:Name="MainGrid">
<Grid Visibility="{Binding IsSelected, Converter={StaticResource BooleanToVisibilityConverter}, ElementName=ribbonTab2}">
<Image x:Name="ImgMain" Source="x.jpg"/>
</Grid>
<Grid Visibility="{Binding IsSelected, Converter={StaticResource BooleanToVisibilityConverter}, ElementName=ribbonTab1}">
<Image x:Name="ImgXtra" Source="y.jpg"/>
</Grid>
</Grid>
... và bạn không cần bất kỳ mã nào cả !
P.S.Ồ, tôi quên bạn phải khai báo BooleanToVisibilityConverter
trong tài nguyên của khóa học
Đơn giản nếu bạn không cần phải ràng buộc mọi thứ. Chỉ cần thêm
- 1. DataGridComboBoxColumn mất nội dung khi lựa chọn thay đổi
- 2. Thay đổi nội dung Spinner khi mở
- 3. Thay đổi nội dung động trong cửa sổ wpf
- 4. WPF Thay đổi ListboxItem Tô sáng màu khi được chọn
- 5. Tôi có thể thay đổi nội dung của nhãn trong trang chính khi tải trang nội dung không?
- 6. Chế độ xem Tab WPF Ribbon trong Nhà thiết kế
- 7. thay đổi nội dung chặn
- 8. VSTO WPF Outlook addin - Vấn đề làm mới một ElementHost chứa nội dung WPF sau khi thay đổi kích thước
- 9. Nội dung tab vẫn hiển thị sau khi thay đổi tab sau khi thay đổi hướng
- 10. Thay đổi nội dung của div - jQuery
- 11. AppBarButtonStyle: Thay đổi nội dung từ mã
- 12. WPF - TabItem Màu nền thay đổi khi tab được chọn hoặc di chuột qua
- 13. Animate thay đổi chiều cao của div khi nội dung của nó thay đổi
- 14. Tải nội dung WPF lười biếng
- 15. Thay đổi cài đặt bảo mật "nội dung hoạt động" trên điều khiển WPF WebBrowser
- 16. khung nội tuyến Thay đổi nội dung CSS Style
- 17. Tự động ngắt khi nội dung của vị trí bộ nhớ thay đổi hoặc được đọc
- 18. Thay đổi nội dung div qua jquery bằng một nội dung của tệp html khác
- 19. Cách tùy chỉnh Ribbon WPF 4.5 (kiểu, mẫu, v.v.)
- 20. Tài liệu JavaScript.Write thay thế tất cả nội dung nội dung Khi sử dụng AJAX
- 21. Có thể ngăn không cho MS Access tự động thay đổi tab ribbon đã chọn khi sử dụng ribbon tùy chỉnh không?
- 22. Nội dung tệp trong Sublime không thay đổi về thay đổi chi nhánh Git
- 23. Thay đổi kiểu khi chạy trong WPF
- 24. của Ruby gsub không làm thay đổi nội dung trong khi thiết lập các nội dung không
- 25. Kích thước thiết lập của ứng dụng wpf/caliburn.micro trong khi cho phép nội dung thay đổi kích thước bằng cửa sổ chính.
- 26. Thay thế một phần nội dung WebView khi đang tải
- 27. jax-ws thay đổi Kiểu nội dung thành Kiểu nội dung vì máy chủ nhạy cảm
- 28. Cuộn 2 nội dung DIV + nội dung chính bằng thanh cuộn chính của trình duyệt
- 29. Làm cách nào để tự động thay đổi kích thước div thành kích thước nội dung của nó khi nội dung của div đã thay đổi?
- 30. jQuery + Jeditable - phát hiện khi chọn được thay đổi
Tôi nghĩ theo ULA của Microsoft, bạn không thể sử dụng giao diện người dùng ribbon có thể thay đổi nội dung của khu vực bề mặt chính khi bạn thay đổi tab. Mỗi tab chỉ có các nút trên thanh công cụ và không thay đổi giao diện nội dung. –
Tôi không chắc là bạn đúng. Hãy suy nghĩ về cách Word hoạt động, khi bạn thay đổi chế độ xem. –
Klaus, bạn có thể vui lòng cung cấp thêm chi tiết về cách bạn giải quyết vấn đề này không? – l33t