2009-03-11 29 views
5

Tôi có một ứng dụng hiển thị các bảng xếp hạng giải đấu cho các giải đấu thể thao. Những bảng này về cơ bản là lưới với các cột khác nhau đại diện cho số liệu thống kê cho mỗi đội như trận đấu, chiến thắng, thua, bàn thắng và ghi bàn vv. Như vậy, bảng xếp hạng có một thuộc tính thú vị: Đối với một cuộc thi nhất định, chúng tôi luôn có cùng số tiền các hàng (đại diện cho các đội). Kể từ khi điều khiển WPF là vô nghĩa, tôi có thể có thể sử dụng một ListBox, một ListView, một ItemsControl trực tiếp, hoặc thậm chí là một DataGrid. Không nên quan trọng lắm.Thay đổi kích thước phông chữ trong danh sách WPF hoặc lưới để sử dụng không gian đúng cách

Tuy nhiên, tôi muốn một cái gì đó mà tôi chưa thể đạt được: Do kích thước bảng (trong thực tế, kích thước của cửa sổ), TẤT CẢ các đội sẽ được hiển thị mọi lúc (không có cuộn dọc), tất cả cột thống kê (như được chọn bởi người dùng) sẽ được hiển thị và kích thước phông chữ sẽ phản ánh điều này sao cho nó lớn nhất có thể mà không có cột nào trở nên quá lớn để nội dung phù hợp.

Tôi có thể dễ dàng sử dụng UniformGrid để đạt được phần không cuộn dọc. Tuy nhiên, việc điều chỉnh kích thước phông chữ dường như không dễ dàng như vậy. Có tất nhiên là ViewBox, cho phép nội dung của mỗi ô trong bảng có kích thước riêng lẻ càng lớn càng tốt, nhưng điều này có thể dẫn đến sự xấu xí khi bạn kết thúc với một loạt các ô có nhiều thay đổi kích cỡ.

Tôi không mong đợi để có được một câu trả lời dễ dàng cho điều này, nhưng nếu nó là tất cả có thể, tôi rất thích nghe về nó. Tóm lại:

  1. Bảng nên thay đổi kích thước bằng cửa sổ trong khi luôn hiển thị tất cả dữ liệu không có thanh cuộn.

  2. Kích thước phông chữ phải được đặt thành kích thước lớn nhất có thể cho phép mỗi cột của mỗi hàng hiển thị tất cả 'nội dung của nó.

  3. Tất cả các cột phải có kích thước nhỏ nhất có thể cho phép hiển thị tất cả nội dung, ngoại trừ một cột có chức năng "* -sizing" để ăn không gian còn lại.

Vì vậy, bất kỳ cách thông minh nào để thực hiện việc này? :)

Trả lời

7

Ứng dụng có hoạt động cho những gì bạn cần làm cho phần tử con của cửa sổ là ViewBox và đặt tất cả nội dung trong đó không?Tôi không chắc liệu chi tiết về những gì bạn đang làm sẽ khiến điều này không hoạt động, nhưng đây là một ví dụ cực kỳ đơn giản về những gì tôi đề xuất:

<Window x:Class="ZoomTest.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1"> 
    <Viewbox> 
     <StackPanel> 
      <TextBlock>2</TextBlock> 
      <TextBlock>Getting longer</TextBlock> 
      <TextBlock>Here is some really long text...</TextBlock> 
     </StackPanel> 
    </Viewbox> 
</Window> 

Toàn bộ nội dung luôn hiển thị, với kích thước phông chữ tối đa có thể. Tất cả các văn bản quy mô thống nhất.

+0

Đúng vậy! Gây tổn thương não +1 cho tôi, tôi đã suy nghĩ về các khung nhìn bên trong các tế bào riêng lẻ, nhưng tất nhiên điều đó hoàn toàn là đạo đức. Tôi chỉ cần có được một va li về các thuộc tính Stretch và tôi nên ở nhà miễn phí - cảm ơn! –

1

Bạn có thể làm điều gì đó như thế này với kích thước phông chữ. Đặt FontSize thành một biểu thức ràng buộc liên kết với TextBox với một IValueConverter tùy chỉnh ({Binding RelativeSource={x:Static RelativeSource.Self}, Converter={StaticResource FontSizeConverter}} hoặc một cái gì đó tương tự). Bên trong bộ chuyển đổi, bây giờ bạn có một tham chiếu đến TextBox mà bạn có thể sử dụng để lấy nội dung văn bản, kích thước của điều khiển, kích thước của điều khiển chính (lưới), v.v. Bạn có thể sử dụng thông tin này để tính toán nhanh chóng.

Nếu bạn cần hộp văn bản để đưa ra quyết định này dựa trên nhau, bạn có thể có gọi lại tĩnh ở cấp trang mà bạn gọi từ bên trong phương thức Chuyển đổi sẽ xác định xem bạn có đang ở chế độ thay đổi kích thước hay không theo dõi bất kỳ thông tin nào khác (tối thiểu hoặc tối đa phông chữ đã được tính toán, v.v.). Đó là một quá trình phức tạp, nhưng phải có một vài cách bạn có thể làm về việc này. Bạn thậm chí có thể ẩn văn bản trong tất cả các hộp lúc đầu, lặp qua tất cả các hộp văn bản thực hiện loại quyết định này (cỡ chữ tối thiểu), sau đó đặt kích thước phông chữ lập trình và làm mờ chúng thành dạng xem.

+0

Cảm ơn bạn đã trả lời - Tôi nghĩ rằng tôi thấy cách tôi có thể làm theo cách này, nhưng câu trả lời từ Daniel Pratt đã giải quyết nó mà không cần thêm công việc, vì vậy tôi đã đưa ra câu trả lời được chấp nhận cho anh ấy. Cảm ơn tho! –

Các vấn đề liên quan