void CreateHandler(ShowTabContentEventArgs e, HexViewDocumentTabContent content, HexPosition? fileOffset, AddressReference addrRef) {
			if (!e.Success)
				return;

			Debug.Assert(e.Tab.Content == content);
			var uiContext = e.Tab.UIContext as HexViewDocumentTabUIContext;
			Debug.Assert(uiContext != null);
			if (uiContext == null || fileOffset == null)
				return;

			var start = fileOffset.Value;
			var end = HexPosition.Min(start + addrRef.Length, HexPosition.MaxEndPosition);
			if (!IsVisible(uiContext.HexView, start, end)) {
				uiContext.HexView.Options.SetOptionValue(DefaultHexViewOptions.StartPositionId, uiContext.HexView.Buffer.Span.Start);
				uiContext.HexView.Options.SetOptionValue(DefaultHexViewOptions.EndPositionId, uiContext.HexView.Buffer.Span.End);
				RedisplayHexLines(uiContext.HexView);
				if (!IsVisible(uiContext.HexView, start, end))
					return;
			}
			if (e.HasMovedCaret)
				return;

			if (!uiContext.HexView.VisualElement.IsLoaded) {
				RoutedEventHandler loaded = null;
				loaded = (s, e2) => {
					uiContext.HexView.VisualElement.Loaded -= loaded;
					InitializeHexView(uiContext.HexView, start, end);
				};
				uiContext.HexView.VisualElement.Loaded += loaded;
			}
			else
				InitializeHexView(uiContext.HexView, start, end);
			e.HasMovedCaret = true;
		}
        void CreateHandler(ShowTabContentEventArgs e, HexViewDocumentTabContent content, HexPosition?fileOffset, AddressReference addrRef)
        {
            if (!e.Success)
            {
                return;
            }

            Debug.Assert(e.Tab.Content == content);
            var uiContext = e.Tab.UIContext as HexViewDocumentTabUIContext;

            Debug.Assert(uiContext != null);
            if (uiContext == null || fileOffset == null)
            {
                return;
            }

            var start = fileOffset.Value;
            var end   = HexPosition.Min(start + addrRef.Length, HexPosition.MaxEndPosition);

            if (!IsVisible(uiContext.HexView, start, end))
            {
                uiContext.HexView.Options.SetOptionValue(DefaultHexViewOptions.StartPositionId, uiContext.HexView.Buffer.Span.Start);
                uiContext.HexView.Options.SetOptionValue(DefaultHexViewOptions.EndPositionId, uiContext.HexView.Buffer.Span.End);
                RedisplayHexLines(uiContext.HexView);
                if (!IsVisible(uiContext.HexView, start, end))
                {
                    return;
                }
            }
            if (e.HasMovedCaret)
            {
                return;
            }

            if (!uiContext.HexView.VisualElement.IsLoaded)
            {
                RoutedEventHandler loaded = null;
                loaded = (s, e2) => {
                    uiContext.HexView.VisualElement.Loaded -= loaded;
                    InitializeHexView(uiContext.HexView, start, end);
                };
                uiContext.HexView.VisualElement.Loaded += loaded;
            }
            else
            {
                InitializeHexView(uiContext.HexView, start, end);
            }
            e.HasMovedCaret = true;
        }