I've created a custom column for my RadGridView, where upon editing the cell, an appropriate control is shown - A RadComboBox for a boolean or an enumeration, a RadMaskedTextInput for text, and a RadMaskedNumericInput for numeric values.
This is working fine except for a slight issue with the custom column when it's using a RadComboBox. What I would like to happen is for the bound value of that cell to update as soon as the user selects a new value from the drop-down. However, the grid currently fires the CellEditEnded event only after the cell loses focus (or after the enter key is pressed), so the user has to select the item from the drop-down, and then click away from the cell for the change to take effect.
I was thinking that a solution for this would be to add an OnSelectionChanged handler to my dynamically-created RadComboBox, and then inside that handler, programmatically end/commit the edit, which would would cause the CellEditEnded event to be fired. However I can't seem to find a way to programmatically commit the edit from inside the custom column?
Alternatively, I was looking at whether the RadComboBox itself has a property that can force this required functionality, but I can't see that either.
Thanks
Hello.
I've written a similar post before.
At that time, there was not much warning output, so I didn't care.
But if I get a lot of Resource not found output, I've seen the design load slowly.
Also, the warning didn't come up when I made a general sample project.
When I use it as a module in another program, it happens.
I used [Row Number] of GridView for Telerik Demo.
I used an implicit style and found this in CellStyle.
The GirdViewCell implicit style is as follows, and all warnings are printed for the ResourceKey of telerik1.
<Style x:Key="GridViewCellStyle" TargetType="grid:GridViewCell">
<Setter Property="Template" Value="{StaticResource GridViewCellTemplate}"/>
<Setter Property="FontSize" Value="{telerik1:FluentResource ResourceKey=FontSize}"/>
<Setter Property="FontFamily" Value="{telerik1:FluentResource ResourceKey=FontFamily}"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="BorderBrush" Value="{telerik1:FluentResource ResourceKey=BasicSolidBrush}"/>
<Setter Property="SelectedBackground" Value="{telerik1:FluentResource ResourceKey=PressedBrush}"/>
<Setter Property="CurrentBorderBrush" Value="{telerik1:FluentResource ResourceKey=IconBrush}"/>
<Setter Property="MouseOverBackground" Value="{telerik1:FluentResource ResourceKey=MouseOverBrush}"/>
<Setter Property="Padding" Value="5 0"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisualStyle}"/>
</Style>
If this is used, the above warning of the image is output.
<behaviour:GridViewRowNumber.CellStyle>
<Style TargetType="telerik:GridViewCell" BasedOn="{StaticResource GridViewCellStyle}">
<Setter Property="Background" Value="LightGray"/>
<Setter Property="TextBlock.TextAlignment" Value="Center"/>
</Style>
</behaviour:GridViewRowNumber.CellStyle>
However, if you find a property in an implicit style for this warning output and wrap it in style, it does not appear.
<behaviour:GridViewRowNumber.CellStyle>
<Style TargetType="telerik:GridViewCell" BasedOn="{StaticResource GridViewCellStyle}">
<Setter Property="Background" Value="LightGray"/>
<Setter Property="TextBlock.TextAlignment" Value="Center"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="FontFamily" Value="Segoe UI"/>
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="SelectedBackground" Value="Transparent"/>
<Setter Property="CurrentBorderBrush" Value="Transparent"/>
<Setter Property="MouseOverBackground" Value="Transparent"/>
</Style>
</behaviour:GridViewRowNumber.CellStyle>
Thanks.
We have documents that use RadDocumentPane and we serialize them on shutdown so we can restore them when the application restarts. The problem is that floating windows don't get their titles set.
While the application is running, forms can be dragged outside and left floating, then redocked and the titles work fine. The issue occurs after startup and the forms are restored from deserialization, floating windows end up with no title. Redocking them works but the tab has no text.
From what I can see of the XAML there are no errors reported for binding to Header or Title, yet the same code works for docked windows but not for floating windows.
WPF I am using Radgridview inside having so many group headers, how to merge a particular cell in a row by index of the column. If have any example project pls post here.
Thanks & Regards
Murugansilvers

Hello,
I use RadRichTextBox and HtmlFormatProvider to render HTML string and faced issue, when Unicode hex character code "​" is rendered like "È€b;"
Is it possible to fix it?
Input HTML string fragment:
<span>​</span>
Hi
I am using Telerik.Windows.Documents.Flow.FormatProviders.Pdf.PdfFormatProvider() to convert a word document(.docx) to pdf.
This takes a lot of time and gives system out of memory exception when the number of pages in the word document is more than 500.
Below is the code snippet:
using (Stream input = new FileStream("temp.docx"), FileMode.Open))
{
Please suggest a solution to this or any other alternative which takes less time and memory.

Downloading and running the WPF UI demo gives an error. Installer log shows:
The following properties have been set:
Property: [AdminUser] = true {boolean}
Property: [InstallMode] = HomeSite {string}
Property: [ProcessorArchitecture] = AMD64 {string}
Property: [VersionNT] = 6.2.0 {version}
Running checks for package 'Windows Installer 4.5', phase BuildList
Looking up path for special folder 'WindowsFolder'
Running check with folder 'C:\Windows\System32' and file 'msi.dll'
Attempting to find file 'C:\Windows\System32\msi.dll'
File version is '5.0.19041.928'
Setting value '5.0.19041.928 {version}' for property 'VersionMsiDll'
The following properties have been set for package 'Windows Installer 4.5':
Property: [VersionMsiDll] = 5.0.19041.928 {version}
Running checks for command 'WindowsInstaller4_5\WindowsXP-KB942288-v3-x86.exe'
Result of running operator 'VersionGreaterThanOrEqualTo' on property 'VersionMsi' and value '4.5': true
Result of checks for command 'WindowsInstaller4_5\WindowsXP-KB942288-v3-x86.exe' is 'Bypass'
Running checks for command 'WindowsInstaller4_5\WindowsXP-KB958655-v2-x86-ENU.exe'
Result of running operator 'VersionGreaterThanOrEqualTo' on property 'VersionMsiDll' and value '4.5.6001.22299': true
Result of checks for command 'WindowsInstaller4_5\WindowsXP-KB958655-v2-x86-ENU.exe' is 'Bypass'
Running checks for command 'WindowsInstaller4_5\WindowsServer2003-KB942288-v4-x86.exe'
Result of running operator 'VersionGreaterThanOrEqualTo' on property 'VersionMsi' and value '4.5': true
Result of checks for command 'WindowsInstaller4_5\WindowsServer2003-KB942288-v4-x86.exe' is 'Bypass'
Running checks for command 'WindowsInstaller4_5\WindowsServer2003-KB958655-v2-x86-ENU.exe'
Result of running operator 'VersionGreaterThanOrEqualTo' on property 'VersionMsiDll' and value '4.5.6001.22299': true
Result of checks for command 'WindowsInstaller4_5\WindowsServer2003-KB958655-v2-x86-ENU.exe' is 'Bypass'
Running checks for command 'WindowsInstaller4_5\WindowsServer2003-KB942288-v4-x64.exe'
Result of running operator 'VersionGreaterThanOrEqualTo' on property 'VersionMsi' and value '4.5': true
Result of checks for command 'WindowsInstaller4_5\WindowsServer2003-KB942288-v4-x64.exe' is 'Bypass'
Running checks for command 'WindowsInstaller4_5\WindowsServer2003.WindowsXP-KB958655-v2-x64-ENU.exe'
Result of running operator 'VersionGreaterThanOrEqualTo' on property 'VersionMsiDll' and value '4.5.6001.22299': true
Result of checks for command 'WindowsInstaller4_5\WindowsServer2003.WindowsXP-KB958655-v2-x64-ENU.exe' is 'Bypass'
Running checks for command 'WindowsInstaller4_5\Windows6.0-KB958655-v2-x86.MSU'
Result of running operator 'VersionGreaterThanOrEqualTo' on property 'VersionMsiDll' and value '4.5.6001.22308': true
Result of checks for command 'WindowsInstaller4_5\Windows6.0-KB958655-v2-x86.MSU' is 'Bypass'
Running checks for command 'WindowsInstaller4_5\Windows6.0-KB958655-v2-x64.MSU'
Result of running operator 'VersionGreaterThanOrEqualTo' on property 'VersionMsiDll' and value '4.5.6001.22308': true
Result of checks for command 'WindowsInstaller4_5\Windows6.0-KB958655-v2-x64.MSU' is 'Bypass'
'Windows Installer 4.5' RunCheck result: No Install Needed
Launching Application.
URLDownloadToCacheFile failed with HRESULT '-2146697208'
Error: An error occurred trying to download 'https://demos.telerik.com/wpf/WPF%20Demos.application'.
Hello.
It will be easier to understand if you refer to the image.
The user wants to independently enable the navigation item according to the user's selection.
My example created a structure like that, but it doesn't work.
Is there any good way?
Thanks.
p.s - In combination with the above functions, can I control A and B Views with Enable at the same time by adding a C Button(True/False)?


Is it possible to remove RadDiagramShape-Connectos at runtime (I've created my own shape-class: BaseNodeShape : RadDiagramShape)?
If I'm calling Connectors.Clear(), the connectors are not removed from the shape, do I need to start/end editing or something like that?
I'm creating connectors like that, since the code is called multiple times, I also need to remove old connectors. But old connectors just stay in ths shape.
/// <summary>
/// Creates connectors and calls LoadConnectorText method
/// </summary>
public virtual void CreateConnectors()
{
if (ViewModel?.DataPins == null || ViewModel?.FlowPins == null)
return;
int longestTextLength = 0;
FlowConnectors?.Clear();
DataConnectors?.Clear();
Connectors?.Clear();
// Fill connector list
foreach (var pin in ViewModel.DataPins)
{
var dataConnector = new DataConnector(pin.Name, pin.DisplayName,
pin.PinDirection == PinDirectionDefinition.In ? ConnectorDirection.In : ConnectorDirection.Out,
pin.DataConnectorType, pin.IsGeneric, pin.AllowedTypes)
{
DataContext = pin
};
DataConnectors.Add(dataConnector);
if (dataConnector.Name.Length > longestTextLength)
longestTextLength = dataConnector.Name.Length;
}
foreach (var pin in ViewModel.FlowPins)
{
var flowConnector = new FlowConnector(pin.Name, pin.DisplayName,
pin.PinDirection == PinDirectionDefinition.In ? ConnectorDirection.In : ConnectorDirection.Out)
{
DataContext = pin
};
FlowConnectors.Add(flowConnector);
if (flowConnector.Name.Length > longestTextLength)
longestTextLength = flowConnector.Name.Length;
}
var headerWidth = 15 + (ViewModel.DisplayName.Length * 8);
var totalLineWidth = longestTextLength * 10;
if (headerWidth < totalLineWidth)
ViewModel.Width = totalLineWidth;
else
ViewModel.Width = headerWidth;
if (ViewModel.Width < 50)
ViewModel.Width = 50;
const double heightPerDataPin = 20;
const double heightPerFlowPin = 20;
const double baseHeight = 35;
var flowInPinCount = FlowConnectors.Count(x => x.ConnectorDirection == ConnectorDirection.In);
var dataInPinCount = DataConnectors.Count(x => x.ConnectorDirection == ConnectorDirection.In);
var flowOutPinCount = FlowConnectors.Count(x => x.ConnectorDirection == ConnectorDirection.Out);
var dataOutPinCount = DataConnectors.Count(x => x.ConnectorDirection == ConnectorDirection.Out);
if ((flowInPinCount * heightPerFlowPin + dataInPinCount * heightPerDataPin) > (flowOutPinCount * heightPerFlowPin + dataOutPinCount * heightPerDataPin))
{
var flowPinsHeight = heightPerFlowPin * flowInPinCount;
var dataPinsHeight = heightPerDataPin * dataInPinCount;
ViewModel.Height = baseHeight + flowPinsHeight + dataPinsHeight + 5;
}
else
{
var flowPinsHeight = heightPerFlowPin * flowOutPinCount;
var dataPinsHeight = heightPerDataPin * dataOutPinCount;
ViewModel.Height = baseHeight + flowPinsHeight + dataPinsHeight + 5;
}
double heightOffset = (35 / ViewModel.Height);
double rowMargin = (18 / ViewModel.Height);
double xLeft = (8 / ViewModel.Width); // 0.04;
double xRight = 1 - xLeft;
double yTop = heightOffset;
foreach (var flowConnector in FlowConnectors
.Where(connector => connector.ConnectorDirection == ConnectorDirection.In))
{
flowConnector.Offset = new Point(xLeft, yTop);
this.Connectors.Add(flowConnector);
yTop += rowMargin;
}
foreach (var dataConnector in DataConnectors
.Where(connector => connector.ConnectorDirection == ConnectorDirection.In))
{
dataConnector.Offset = new Point(xLeft - 0.01, yTop);
this.Connectors.Add(dataConnector);
yTop += rowMargin;
}
yTop = heightOffset;
foreach (var flowConnector in FlowConnectors
.Where(connector => connector.ConnectorDirection == ConnectorDirection.Out))
{
flowConnector.Offset = new Point(xRight, yTop);
this.Connectors.Add(flowConnector);
yTop += rowMargin;
}
foreach (var dataConnector in DataConnectors
.Where(connector => connector.ConnectorDirection == ConnectorDirection.Out))
{
dataConnector.Offset = new Point(xRight, yTop);
this.Connectors.Add(dataConnector);
yTop += rowMargin;
}
}