I'm trying something like this:
....
....
and
class Position : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
GeneralTransform generalTransform = value.TransformToVisual(null); // here I get error
Point point = generalTransform.Transform(new Point());
return "X="+Point.X+"Y="+Point.Y;
}
....
and the result is following error: 'object' does not contain a definition for 'TransformToVisual' and no extension method 'TransformToVisual' accepting a first argument of type 'object' could be found
Any ideas how to solve this, or maybe some one know different approach to get absolute position of listbox elements?
Regards,
Tadek.
Sam HobbsPosted Mar 8, 2011, 10:20 PM
TadekPosted Mar 10, 2011, 5:51 AM
converter works same with Point(0,0) and Point()
but Im binding to ancestor grid rather than textblock itself (binding self always crashed regardless of converter contents).
It works somehow:
Blend have sometimes problems with it ("cannot resolve AbsolutePosition resource") , its ok in VS.
In design view it shows positions in Internal.designer
on run shows correct values.
It's not a perfect and still need to do some refreshing.
Sam HobbsPosted Mar 9, 2011, 11:34 AM
TadekPosted Mar 9, 2011, 5:03 AM
and now my converter class looks like this
class AbsolutePosition : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var myVisualRoot = FindVisualTreeRoot(value as DependencyObject);
GeneralTransform generalTransform = (myVisualRoot as Visual).TransformToVisual(value as System.Windows.Controls.TextBlock);
Point point = generalTransform.Transform(new Point(0,0));
return "X:" + point.X.ToString() + "Y:" + point.Y.ToString() + "root name:" + myVisualRoot.ToString();
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
DependencyObject FindVisualTreeRoot(DependencyObject initial)
{
DependencyObject current = initial;
DependencyObject result = initial;
while (current != null)
{
result = current;
if (current is Visual || current is Visual3D)
{
current = VisualTreeHelper.GetParent(current);
}
else
{
current = LogicalTreeHelper.GetParent(current);
}
}
return result;
}
}...and the results are x:0 y:0 for every item,
courious thing - when I'll make some irrevelant change in converter resource link code so design view will reload - it shows probable results,
but on the run all are zeros.