2010-03-03 19 views
6

khi tôi d bấm đúp vào - hoặc nhấp một lần khi đã được tập trung - bên dưới các mục trong vùng trống của Listbox nằm trong DataGridTemplateColumn của tôi sau đó tôi nhận được thông báo lỗi trên.WPF: System.ArgumentException => {"'{0}' không phải là Visual hoặc Visual3D."}

Tôi làm gì sai?

Đây là Mã của tôi:

<DataGridTemplateColumn Width="0.3*" Header="Attachments"> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Vertical"> 
       <Button>Add</Button> 
       <Button>Delete</Button> 
       <ListBox Name="itemListBox" BorderThickness="0" ItemsSource="{Binding Attachments}" >         
        <ListBox.ItemTemplate> 
         <DataTemplate>           
          <StackPanel Orientation="Vertical" Margin="5">             
           <TextBlock Text="{Binding DocumentFilename}" /> 
          </StackPanel>            
         </DataTemplate> 
        </ListBox.ItemTemplate>          
       </ListBox> 
      </StackPanel> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

Regard rằng hình ảnh mà tôi nhấp vào bên dưới "myPhotos.png" entry mục: alt text http://666kb.com/i/bh6lbd47okwancfel.png

EDIT: Lỗi này cũng đã xuất hiện trên XAML thông qua tooltip chỉ không nhìn thấy rằng tooltip lỗi ...

+0

bạn có thể post đoạn code phía sau để điều này? –

+0

không tồn tại mã nào phía sau :) – msfanboy

+2

theo điều này => http://social.msdn.microsoft.com/forums/en-US/wpf/thread/5982cafe-f75b-42b4-99dc-50d3a81b30b0/ Tôi đặt cược Tôi tìm thấy một BUG !!! – msfanboy

Trả lời

8

Điều đó thực sự có vẻ là một lỗi. Tôi chạy dự án repro của bạn và kiểm tra stack cuộc gọi khi ngoại lệ được ném. Nó xảy ra trong DataGridCell.RemoveBindingExpressions trong khi gọi tới VisualTreeHelper.IsAncestorOf. Phương thức thứ hai ném một ngoại lệ khi nó được truyền qua một đối tượng không phải là Visual hoặc Visual3D. Nhưng DataGridCell là đi qua nó bất cứ điều gì yếu tố là mục tiêu của ràng buộc. Trong trường hợp của bạn mà xảy ra là một Run mà không lấy được từ Visual.

Tôi đã suy nghĩ bạn có thể làm việc xung quanh nó bằng cách sử dụng một IValueConverter để tạo FlowDocument và ràng buộc RichTextBox.Document để ràng buộc đang được áp dụng cho RichTextBox. Nhưng vì Document không phải là một thuộc tính phụ thuộc, nó không thể là một mục tiêu ràng buộc.

Vì vậy, thay vì những gì bạn có thể muốn làm là tạo một UserControl nơi đặt máy chủ điều khiển RichTextBox:

<DataGridTemplateColumn.CellTemplate> 
    <DataTemplate> 
     <Local:HomeworkControl Text="{Binding Homework}" /> 
    </DataTemplate> 
</DataGridTemplateColumn.CellTemplate> 

Sau đó, trong đó kiểm soát người dùng mà bạn sẽ chăm sóc xây dựng RichTextBox, tài liệu, chạy, vv Thật không may Tôi nghĩ rằng đây chỉ là một hạn chế (hay còn gọi là lỗi) trong điều khiển DataGrid.

+0

@Josh Bạn có vẻ đúng, tôi đã thử teleriks RadGridView và thay thế DataGrid từ M $. Tất cả mọi thứ hoạt động tốt không có ngoại lệ. Nếu bạn kiểm tra chủ đề khác của tôi ngay cả với RadGridView bây giờ RichTextbox là tụt hậu và tôi không thể gõ rất nhanh => http://stackoverflow.com/questions/2404736/wpf-richtextbox-typing-twice-slower-than-in-a -vb-5-0-richtextbox – msfanboy

0

Tôi gặp lỗi này thường xuyên trong Blend, nhưng không phải lúc chạy trong DataGrid.

Tôi đã tìm thấy rằng hoặc là biên dịch ứng dụng (trong trường hợp của tôi trong VS) và cho phép Blend tải lại các DLL sửa chữa nó. Ngoài ra sắp xếp lại các cột dường như kích hoạt nó để cập nhật chính nó. Big đau mặc dù!

5

Điều thú vị này cũng xảy ra với tôi. Những gì Josh nói khiến tôi suy nghĩ. Nó có vẻ như một khi bạn chọn các tế bào và chọn nó một lần nữa nó cố gắng để tải CellEditingTemplate mà không được chỉ định trong trường hợp của tôi và của bạn và nó ném ngoại lệ Visual/Visual3d.

tôi đã nhận nó cố định bằng cách xác định IsReadOnly = "True" trên tôi DataGridTemplateColumn. Tôi không sử dụng CellEditingTemplate anyway bởi vì tôi đang làm chèn số lượng lớn với TextBoxes/DatePicker/Checkboxes vv nạp trong các mẫu tế bào.

4

Tôi đã có cùng một vấn đề với một DataGrid với một cột tùy chỉnh với một siêu kết nối với chạy nhúng, với bộ ràng buộc trên thuộc tính văn bản của chạy. Khi chạy Văn bản ràng buộc không được đặt rõ ràng là BindingMode.OneWay Tôi gặp lỗi này. Đặt nó giải quyết một cách rõ ràng vấn đề. Lưu ý tôi đã có ngoại lệ khi chỉnh sửa các cột ANY trong hộp dữ liệu không chỉ là cột này.

0

Tôi gặp lỗi này khi chỉnh sửa cột trong lưới dữ liệu. ở đây cột xaml:

<DataGridTextColumn Header="Precio Unit." Binding="{Binding UnitPrice,StringFormat=0.00}" Width="Auto" MinWidth="115" /> 

Nhưng lỗi xảy ra ở cột khác; đây XAML:

     <DataGridTemplateColumn Header="Descripción" MinWidth="600" Width="Auto" IsReadOnly="True" > 
          <DataGridTemplateColumn.CellTemplate > 
           <DataTemplate > 
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center"> 
             <TextBlock Text="{Binding FixedName, Converter={StaticResource toUpperConverter}}" Background="Transparent" 
               VerticalAlignment="Center" Margin="0"/> 
             <TextBlock Margin="5,0,0,0" Foreground="#FFCB6A6A" FontWeight="Normal"> 
              <Run Text="(Stock "/> 
              <Run Text="{Binding Stock}"/> 
              <Run Text=")"/> 
             </TextBlock> 
            </StackPanel> 
           </DataTemplate> 
          </DataGridTemplateColumn.CellTemplate> 
         </DataGridTemplateColumn> 

Các lỗi biến mất chỉ định rõ:

<Run Text = "{Binding Stock, Mode = OneWay}" /> 
Các vấn đề liên quan