Если я правильно вас понимаю, вы говорите, что когда элемент управления прокручивается из ViewPort приложения, тогда, даже если его свойство visible остается истинным, FrameworkElement.FindName ("") не может его найти.
Я предполагаю, что вы прошли через все основы: область видимости Xaml и т. Д. Если вы добавляете элементы управления динамически, уверены, что ушли от правильного родительского элемента и т. Д. Если так:
Используя RedGates Reflector, мы видим, что FrameWorkElement.FindName реализован следующим образом:
public object FindName(string name)
{
return XcpImports.DependencyObject_FindName(this, name);
}
XcpImports.DependencyObject_FindName реализовано как
[SecuritySafeCritical]
internal static DependencyObject DependencyObject_FindName(DependencyObject referenceDO, string name)
{
int num;
IntPtr ptr;
CheckThread();
if (name == null)
{
throw new ArgumentNullException("name");
}
uint hr = FindNameNative(JoltHelper.Context, (uint) name.Length, name, referenceDO.NativeObject, out num, out ptr);
GC.KeepAlive(referenceDO);
if ((hr != 0) && (hr != 0x80004005))
{
throw Error.MarshalXresultAsException(hr);
}
return (DependencyObject) ConvertDO(ptr, num, true);
}
Так что, если вы не столкнулись с исключением, я думаю, что наиболее интересная строка, вероятно, будет:
uint hr = FindNameNative(JoltHelper.Context, (uint) name.Length, name, referenceDO.NativeObject, out num, out ptr);
Который выходит в собственный код и определяется через импорт DLL в XcpImports:
[DllImport("agcore", EntryPoint="FindName", CharSet=CharSet.Unicode)]
private static extern uint FindNameNative(IntPtr context, uint cString, [MarshalAs(UnmanagedType.LPWStr)] string name, IntPtr referenceObject, out int typeIndex, out IntPtr obj);
Не следует путать с AgCore для разработчиков Express.
Эта статья на ZdNet (около 2007 г.) Эд Бернетта:
http://www.zdnet.com/blog/burnette/dissecting-silverlight/297
Говорит, что:
agcore.dll (установлен 2.2M) - это основной элемент управления ActiveX, который
отвечает за рендеринг Silverlight и события, включая аудио и
декодирование видео.
Ниже также сказано, что:
npctrl.dll (460K) - Обертка для agcore.dll, которая заставляет его работать внутри
Firefox.
Так что мой первый вопрос будет. Ваша проблема постоянна в каждом браузере?
Возможно, проблема заключается в оболочке для agcore.dll в некоторых браузерах / версиях, а не в самой базовой технологии (agcore.dll).