또한 at Infragistics이라고 물었습니다. 그러나 여기에 내 코드의 서식을 지정하는 방법을 모르므로 여기에 서식이 올바르게 지정되어 있습니다.cellValuePresenter/TypeConverter를 XamDataGrid 셀에 적용 할 수 없습니다.
내 목표는 여러 색상을 사용하여 각 셀의 텍스트로 구조화 된 데이터의 테이블을 제공하는 것입니다. 맞춤형 클래스에 저장된 데이터를 여러 색상으로 된 여러 텍스트 요소가 포함 된 레이블 또는 텍스트 블록으로 변환하는 typeconverter가 있습니다. 데이터는 데이터 테이블 (작동하는 모든 메소드)에 제공되며 각 값은 셀에 올바르게 적용됩니다.
문제는 내 TypeConverter를 사용하는 대신 ToString 메서드를 사용하는데,이 모델은 모델 데이터가 셀별로 그리드 셀에 매핑된다는 것을 알기 때문에 재정의합니다. 또한 내가 사용하고있는 ControlTemplate 속성이 적용되지 않아 ControlTemplate이 사용되지 않는다고 알려줍니다.
DataGrid에서 다른 글자의 색상이 다른 곳에 텍스트를 배치 할 수 없다는 우려가 있습니다. 그렇다면 좋은 사용자 환경을 유지하면서 xaml 파일 (그리드가 딱딱한)에 디자인을 유지하면서 다른 방법을 사용할 수 있습니까?
내 코드는 사용자 정의 CellValuePresenter를 정의해야합니다. 아무도 나를 적용 해 주시겠습니까?
여기에 관련 코드를 게시합니다. 대부분은 난독 화되어 있으므로 철자 오류에 집중하지 마십시오.
<Window x:Class="ViewName"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:LocalNamespace"
xmlns:ViewModel="clr-namespace:LocalNamespace.ViewModel"
xmlns:model="clr-namespace:LocalNamespace.Model"
xmlns:igDP="http://infragistics.com/DataPresenter"
>
<Window.Resources>
<local:Converter x:Key="converter" />
<ViewModel:ViewModelLocator x:Key="viewModelLocator" />
<Style TargetType="{x:Type igDP:CellValuePresenter}" x:Key="cellTemplate" x:Name="cellTemplate" >
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type igDP:CellValuePresenter}">
<Label
Content="{Binding Converter={StaticResource converter}}"
Width="200"
MaxWidth="600"
MinHeight="20"
/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<StackPanel Name="stackPanel">
<igDP:XamDataGrid Name="DifferenceGrid" DataSource="{Binding Source={StaticResource viewModelLocator}, Path=ViewModel.Model}"
ScrollViewer.CanContentScroll="True" ScrollViewer.HorizontalScrollBarVisibility="Visible" ScrollViewer.VerticalScrollBarVisibility="Visible">
<igDP:XamDataGrid.FieldLayouts>
<igDP:FieldLayout>
<igDP:FieldLayout.Fields>
<igDP:Field>
<igDP:Field.Settings>
<igDP:FieldSettings
CellValuePresenterStyle="{StaticResource cellTemplate}">
</igDP:FieldSettings>
</igDP:Field.Settings>
</igDP:Field>
</igDP:FieldLayout.Fields>
</igDP:FieldLayout>
</igDP:XamDataGrid.FieldLayouts>
</igDP:XamDataGrid>
</StackPanel>
</Window>
class ViewModelLocator
{
private static ViewModel viewModel = new ViewModel();
public ViewModel ViewModel
{
get
{
return viewModel;
}
}
}
public class ViewModel
{
private DataTable model;
public DataTable Model
{
get
{
return this.model;
}
private set
{
this.model = value;
}
}
[global::System.ComponentModel.TypeConverter(typeof(Model.CustomClass))]
public class Converter : TypeConverter, IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (this.CanConvertTo(targetType))
{
return this.ConvertTo(value);
}
else
{
return null;
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (this.CanConvertFrom(targetType))
{
return this.ConvertFrom(value);
}
else
{
return null;
}
}
public new bool CanConvertFrom(Type sourceType)
{
// Textboxes don't need to be converted back.
return sourceType == typeof(Model.CustomClass);
}
public new bool CanConvertTo(Type destinationType)
{
return destinationType == typeof(Model.CustomClass);
}
public object ConvertTo(object value)
{
return this.ConvertCustomClassToTextBlock(value);
}
public new object ConvertFrom(object value)
{
return this.ConvertCustomClassToTextBlock(value);
}
private object ConvertCustomClassToTextBlock(object value)
{
TextBlock text = new TextBlock();
Label cell = new Label();
// Construct the TextBlock.
cell.Context = text;
return text; // Or cell, whatever works.
}
}
감사합니다. 이것은 적어도 원칙적으로 가능함을 보여줍니다. 나는 당신의 모범을 얻었으니, 이제는 내 창에서 그것을 구현하려고한다. 내 창에서 XamTextEditor는 적용되지 않습니다. 다른 템플리트가 적용되지 않는 것과 거의 같은 문제입니다. – MrFox
내 typeconverter를 호출 할 수 없습니다. – MrFox
업데이트 된 답변보기 – Stipo